我们正在移植我们的 Jenkins 管道以在 Windows 环境中工作。
Jenkins的master使用Cygwin sshd连接到我们的Windows遥控器 - 名为winremote
。如本页所述,节点的Remote root directory
作为普通的 Windows 路径给出(在本例中,它设置为 C:\cygwin64\home\jenkins\jenkins-slave-dir)
这个最小的管道示例:
node("winremote")
{
echo "Entering Windows remote"
sh "ls -l"
}
失败并显示错误:
[Pipeline] echo
Entering Windows rmeote
[Pipeline] sh
[C:cygwin64homejenkinsjenkins-slave-dirworkspaceproto-platforms] Running shell script
sh: C:cygwin64homejenkinsjenkins-slave-dirworkspaceproto-platforms@tmpdurable-a739272fscript.sh: command not found
SSH进入Windows遥控器,我能够看到Jenkins实际上在C:cygwin64homejenkinsjenkins-slave-dir
中创建了workspace
子目录,但它是空的。
有没有一种已知的方法可以在这样的遥控器上使用sh
管道步骤?
来自blatinville的PR,在这个问题几个小时后合并,解决了第一个问题。可悲的是,它引入了另一个问题,在票证 JENKINS-41225 中描述,错误如下:
nohup: failed to run command 'sh': No such file or directory
有一个建议的 PR 来快速解决此问题。
然后还有最后一个问题,即持久任务插件如何使用"ps"评估任务是否仍然活着,另一个 PR 修复它。
临时解决方案
在应用这些(或等效的)修复程序之前,可以使用以下命令编译与Cygwin兼容的持久任务插件:
git clone https://github.com/Adnn/durable-task-plugin.git -b cygwin_fixes
cd durable-task-plugin/
mvn clean install -DskipTests
它特别生成了target/durable-task.hpi文件,该文件可用于替换Jenkins在其插件文件夹中安装的durable-task.jpi文件。然后需要重新启动 Jenkins。