我有一个用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是否可以在詹金斯内部工作?有人可以帮我解决这个问题。我有点困惑。
答案 0 :(得分:0)
jenkins用户可能不在SHFileOperation
上。尝试访问$PATH
的绝对路径。
编辑:鉴于评论中的信息,您可能需要
在jenkins服务器上为vimdiff创建符号链接,如下所示:
vimdiff
使用Java代码中的绝对路径调用符号链接的二进制(ln -s /usr/bin/vim.tiny /usr/bin/vimdiff
)
答案 1 :(得分:0)
默认情况下,vim.tiny已安装在jenkins服务器中。 vim.tiny是vim的紧凑版本,根据vim文档,它不支持vimdiff。因此vimdiff不在shell脚本中运行。解决方法是,我在“预构建步骤”->“执行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更新
sudo apt-get -y install libncurses5-dev
以上三个命令将安装必要的库,以执行sudo apt-get install命令。在sudo命令中提供“ -y”将自动对要求用户安装许可的终端提示采用“是”。
sudo apt remove -y vim-tiny
sudo 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!'