基于环境变量的詹金斯管道条件阶段

时间:2018-07-10 21:50:13

标签: jenkins jenkins-pipeline

我想创建一个Jenkins(v2.126)声明性语法管道,该管道具有用when()子句检查环境变量值的阶段。具体来说,我想设置一个Jenkins作业参数(因此,“使用参数构建”,而不是管道参数),并由它确定是否执行了阶段。

我有这样的阶段代码:

stage('plan') {
  when {
     environment name: ExecuteAction, value: 'plan'
  }
  steps {
     sh 'cd $dir && $tf plan'
  }
}

参数名称为ExecuteAction。但是,当通过Job“ Choice”参数将ExecuteAction设置为:plan时,此阶段不会运行。通过添加以下调试阶段,我可以看到适当的值是通过环境变量传入的:

stage('debug') {
  steps {
     sh 'echo "ExecuteAction = $ExecuteAction"'
     sh 'env'
  }
}

然后我得到控制台输出,如下所示:

[Pipeline] stage
[Pipeline] { (debug)
[Pipeline] sh
[workspace] Running shell script
+ echo 'ExecuteAction = plan'
ExecuteAction = plan
[Pipeline] sh
[workspace] Running shell script
+ env
...
ExecuteAction=plan
...

我使用Jenkins book pipeline syntax中的when声明式语法,大约在页面的中间部分,内置条件为when。

Jenkins在Gnu / Linux上运行。

有什么主意我可能做错了吗?

2 个答案:

答案 0 :(得分:1)

Du!您需要在when子句中引用环境变量的名称。

stage('plan') {
  when {
     environment name: 'ExecuteAction', value: 'plan'
  }
  steps {
     sh 'cd $dir && $tf plan'
  }
}

答案 1 :(得分:0)

我认为您需要使用 参数 ,而不是 环境 。请尝试以下操作:

when {
     expression { params.ExecuteAction == 'plan' }
}