我们可以从 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!'
我有一个用 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!'