Jenkins Pipeline 无法在 Windows 从站中执行 SH 命令文件
Jenkins Pipeline cannot execute SH command file in a Windows slave
我正在执行这段代码:
node('my_windows_slave') {
sh 'ls'
}
在我的 Windows 奴隶中我可以正确执行 sh
命令:
但是管道脚本不能 运行 .sh
文件:
[Pipeline] sh
[D:\workspace\sandbox_pipeline] Running shell script
sh: D:\workspace\sandbox_pipeline@tmp\durable-2d7dd2f8\script.sh: command not found
我能注意到的是,这个 .sh
文件甚至没有创建,一旦我尝试使用 bat
并且工作正常。
任何线索可能是什么问题?
[更新]
Jenkins 无法创建 SH
临时文件。已经检查了日志,权限,我想到的一切。
一旦我仍然不能 100% 确定根本原因并且可能其他人会提出一个优雅的解决方案,我将在批准它之前留下我的解决方法作为答案...
def shell(command) {
return bat(returnStdout: true, script: "sh -x -c \"${command}\"").trim()
}
关注
您仍在 CMD
中执行 SH
命令,这意味着某些 %d
可能会破坏您的 SH
命令。
使用 bat
步骤代替 sh
。
来自詹金斯docs:
Windows-based systems should use the bat step for executing batch commands.
我正在执行这段代码:
node('my_windows_slave') {
sh 'ls'
}
在我的 Windows 奴隶中我可以正确执行 sh
命令:
但是管道脚本不能 运行 .sh
文件:
[Pipeline] sh
[D:\workspace\sandbox_pipeline] Running shell script
sh: D:\workspace\sandbox_pipeline@tmp\durable-2d7dd2f8\script.sh: command not found
我能注意到的是,这个 .sh
文件甚至没有创建,一旦我尝试使用 bat
并且工作正常。
任何线索可能是什么问题?
[更新]
Jenkins 无法创建 SH
临时文件。已经检查了日志,权限,我想到的一切。
一旦我仍然不能 100% 确定根本原因并且可能其他人会提出一个优雅的解决方案,我将在批准它之前留下我的解决方法作为答案...
def shell(command) {
return bat(returnStdout: true, script: "sh -x -c \"${command}\"").trim()
}
关注
您仍在 CMD
中执行 SH
命令,这意味着某些 %d
可能会破坏您的 SH
命令。
使用 bat
步骤代替 sh
。
来自詹金斯docs:
Windows-based systems should use the bat step for executing batch commands.