一尘不染

在管道作业中设置每个节点的环境变量

jenkins

我的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

我实际上看到的是,env命令运行时ENVVAR=bar在两个节点上都设置了。

根据本教程,“ [特殊变量env]的属性是当前节点上的环境变量。” 因此,我希望这能奏效。


阅读 255

收藏
2020-07-25

共1个答案

一尘不染

在本教程的后面,它说:

在这种情况下,请勿使用env:

env.PATH = "${mvnHome}/bin:${env.PATH}"

因为环境变量的覆盖仅限于对管道运行是全局的,而不是当前线程(以及代理)的局部。但是,您可以使用上述的withEnv步骤。

看起来像是DSL的丑陋限制。它withEnv一步一步地完成了整个阶段。

2020-07-25