尝试在第二个sh
上执行node()
步骤失败。
最小的例子:
node('windows') {
env.PATH = "C:\\some\\path;${env.PATH}"
// ...
}
node('linux') {
sh "echo 'Hello World!'" // this fails
}
错误消息是:
nohup: failed to run command 'sh': No such file or directory
正确设置PATH
环境变量以在两个节点上包含sh
命令。
为什么第二个节点上的sh
步骤失败了?
答案 0 :(得分:6)
tl; dr:问题是通过作业设置env.PATH
。请改用withEnv()
:
node('windows') {
withEnv('PATH+some=C:\\some\\path') {
// ...
}
}
node('linux') {
sh "echo 'Hello World!'"
}
在pipeline tutorial的后续部分之一中,据说
环境变量覆盖仅限于管道运行的全局
这意味着在设置类似此env.PATH = ...
的环境变量时,此变量已修复其余的管道脚本,因此将覆盖该环境变量的实际值在所有后续节点上。因此,它反转了env
属性设置为节点环境变量实际值的正常行为。
所以我们的Linux节点最终得到了Windows节点的PATH
变量。
这就是sh
找不到的原因
注意好奇: nohup
仍然被发现,因为它是由使用" real"节点的环境变量。但Jenkins随后为nohup
流程设置了修改后的环境,这就是nohup
在sh
中找不到PATH
的原因。