试图在第二个node()上执行一个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 directoryPATH环境变量被正确设置为包含两个节点上的sh命令。
为什么第二个节点上的sh步骤失败?
发布于 2016-11-17 23:41:27
博士:问题是用作业设置env.PATH。使用withEnv()代替:
node('windows') {
withEnv('PATH+some=C:\\some\\path') {
// ...
}
}
node('linux') {
sh "echo 'Hello World!'"
}解释:
在管道教程的后续部分中,据说
环境变量重写仅限于全局执行管道运行。
这意味着,当设置像这个env.PATH = ...这样的环境变量时,这个变量是为管道脚本的其余部分修复的,因此将覆盖该环境变量在所有后续节点上的实际值。因此,它逆转了将env属性设置为节点的环境变量的实际值的正常行为。
因此,我们的Linux节点最终得到了PATH节点的变量。这就是为什么没有找到sh。
请注意:nohup仍然被找到,因为它是由Jenkins客户机直接执行的,它使用节点的“真实”环境变量。但是Jenkins随后为nohup进程设置了修改后的环境,这就是为什么nohup无法在PATH中找到sh的原因。
https://stackoverflow.com/questions/40667032
复制相似问题