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

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

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

当我 运行 这个来自 jenkins 的测试方法时,shell 脚本正在执行。但是 vimdiff 命令没有被执行。

Java 调用 shell 脚本的方法

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'   -c TOhtml -c 'w! '""'' -c 'qa!'

此方法在我的 intellij 中运行良好,但在 jenkins 内部 vimdiff 无效。在 jenkins 中,我使用 echo 语句验证了参数是否正确传递。所以这不是问题。所以我的问题是,vimdiff 是否在 jenkins 内部工作?有人可以帮我解决这个问题吗?我有点困惑。

它可能不在 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 脚本中不是 运行。作为解决方法,我在 Pre-Build Steps -> Execute 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) main universe"

    sudo apt-get 更新

    sudo apt-get -y 安装 libncurses5-dev

    以上三个命令安装了执行sudo apt-get install 命令所需的库。在 sudo 命令中提供 '-y' 将自动对询问用户安装许可的终端提示采取 yes

  • sudo apt remove -y vim-tiny

    sudo apt-get -y 安装vim

    以上两个命令删除vim-tiny然后安装完整版vim

  • echo 语法关闭> ~/.vimrc

    在 vimdiff 中默认语法高亮是打开的。所以 vimdiff 输出的外观和感觉非常糟糕。所以上面的命令创建了一个 '.vimrc' 文件并将 'syntax off' 添加到该文件并保存它。这将关闭 vimdiff 输出中的语法突出显示并改善外观

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

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