我有一个用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

09-27 16:52