尝试在sh第二步执行步骤node()失败.最小的例子:
node('windows') {
env.PATH = "C:\\some\\path;${env.PATH}"
// ...
}
node('linux') {
sh "echo 'Hello World!'" // this fails
}
Run Code Online (Sandbox Code Playgroud)
错误消息是:
nohup: failed to run command 'sh': No such file or directory
Run Code Online (Sandbox Code Playgroud)
在PATH环境变量设置正确为包含sh两个节点上命令.
为什么sh第二个节点上的步骤失败?
tl; dr:问题是设置env.PATH了一项任务.withEnv()改为使用:
node('windows') {
withEnv('PATH+some=C:\\some\\path') {
// ...
}
}
node('linux') {
sh "echo 'Hello World!'"
}
Run Code Online (Sandbox Code Playgroud)
在管道教程的后面部分之一,据说
环境变量覆盖仅限于管道运行的全局
这意味着在设置这样的环境变量时,env.PATH = ...此变量对于管道脚本的其余部分是固定的,因此将覆盖所有后续节点上该环境变量的实际值.因此,它反转了env属性设置为节点的环境变量的实际值的正常行为.
所以我们的Linux节点最终PATH得到了Windows节点的变量.这就是sh找不到的原因.
注意到好奇: nohup仍然被发现,因为它是由Jenkins客户端直接执行的,它使用节点的"真实"环境变量.但詹金斯然后为这个nohup过程设置了修改后的环境,这就是为什么nohup找不到sh的PATH.
| 归档时间: |
|
| 查看次数: |
2887 次 |
| 最近记录: |