繁体   English   中英

我们可以从jenkins中的shell脚本执行vim命令吗?

[英]Can we execute vim commands from a shell script inside jenkins?

我有一个用Java编写的@Test方法,该方法调用Shell脚本。 shell脚本包含vimdiff命令,该命令用于在两个html文件之间生成代码比较。

当我从jenkins运行此测试方法时,shell脚本正在执行。 但是vimdiff命令没有得到执行。

调用shell脚本的Java方法

try {
            File[] uiDiffDir = getFiles();

            for (File file : uiDiffDir) {

                String[] cmd = {"sh", shellScriptPath, beforeHtmlPath + file.getName(), afterHtmlPath + file.getName(),
                        codeComparisonPath + file.getName()};
                Process p = Runtime.getRuntime().exec(cmd);
                p.waitFor();
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        p.getInputStream()));
                String line;
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

shell.sh

 vimdiff -c 'set foldlevel=9999' $1 $2 -c TOhtml -c 'w! '"$3"'' -c 'qa!'

从我的intellij来看,此方法运行良好,但是在詹金斯(Jenkins)内部,vimdiff无法运行。 从詹金斯(Jenkins),我验证了使用echo语句正确传递了参数。 所以那不是问题。 所以我的问题是,vimdiff是否可以在詹金斯内部工作? 有人可以帮我解决这个问题。 我有点困惑。

对于jenkins用户,它可能不在$PATH 尝试前往vimdiff的绝对路径。

编辑 :鉴于您的评论信息,您可能需要

  • 在您的jenkins服务器上为vimdiff创建一个符号链接,如下所示:

     ln -s /usr/bin/vim.tiny /usr/bin/vimdiff 
  • 使用Java代码中的绝对路径调用符号链接的二进制文件( /usr/bin/vimdiff

默认情况下,vim.tiny已安装在jenkins服务器中。 vim.tiny是vim的紧凑版本,根据vim文档,它不支持vimdiff。 因此vimdiff不在shell脚本中运行。 解决方法是,在“预构建步骤”->“执行”外壳程序中包含以下命令

#!/usr/bin/env bash
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe"
sudo apt-get update
sudo apt-get -y install libncurses5-dev
sudo apt remove -y vim-tiny
sudo apt-get -y install vim
echo syntax off> ~/.vimrc

每个命令的功能:

  • sudo add-apt-repository“ deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc)主宇宙”

    sudo apt-get更新

    须藤apt-get -y install libncurses5-dev

    以上三个命令安装了必要的库,以执行sudo apt-get install命令。 在sudo命令中提供'-y'将会自动为要求用户安装许可的终端提示输入yes

  • sudo apt remove -y vim-tiny

    须藤apt-get -y install vim

    上面的两个命令删除了vim-tiny,然后安装了完整版的vim

  • 回显语法关闭>〜/ .vimrc

    默认情况下,在vimdiff中语法高亮显示为ON。 因此,vimdiff输出的外观和感觉非常差。 因此,以上命令将创建一个“ .vimrc”文件,并将“关闭语法”添加到该文件并保存。 这将关闭vimdiff输出中的语法高亮显示并改善外观

在执行Jenkins预构建步骤中的所有这些步骤之后,vimdiff在当前运行的jenkins构建中可用,并且我能够在从Java方法调用的shell脚本中使用以下vimdiff命令。

/usr/bin/vimdiff -c 'set foldlevel=9999' $1 $2 -c TOhtml -c 'w! '"$3"'' -c 'qa!'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM