我的Jenkins管道看起来像这样(请原谅一些小的语法错误):
def buildsToDo = "foo bar".tokenize() def buildPlan = [:] for (int i = 0; i < buildsToDo.size(); i ++) { def tag = buildsToDo[i] buildPlan[tag] = { node(tag) { env.ENVVAR = tag stage("build " + tag) { sh 'env' } } } } parallel(buildPlan)
我的意图是与拥有一个节点,ENVVAR=foo与拥有一个节点ENVVAR=bar。
ENVVAR=foo
ENVVAR=bar
我实际上看到的是,env命令运行时ENVVAR=bar在两个节点上都设置了。
env
根据本教程,“ [特殊变量env]的属性是当前节点上的环境变量。” 因此,我希望这能奏效。
在本教程的后面,它说:
在这种情况下,请勿使用env: env.PATH = "${mvnHome}/bin:${env.PATH}" 因为环境变量的覆盖仅限于对管道运行是全局的,而不是当前线程(以及代理)的局部。但是,您可以使用上述的withEnv步骤。
在这种情况下,请勿使用env:
env.PATH = "${mvnHome}/bin:${env.PATH}"
因为环境变量的覆盖仅限于对管道运行是全局的,而不是当前线程(以及代理)的局部。但是,您可以使用上述的withEnv步骤。
看起来像是DSL的丑陋限制。它withEnv一步一步地完成了整个阶段。
withEnv