【问题标题】:Jenkins Pipeline Conditional Stage based on Environment Variable基于环境变量的 Jenkins 流水线条件阶段
【发布时间】:2018-07-10 21:50:12
【问题描述】:

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

我有这样的阶段代码:

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

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

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 上运行。

任何想法我可能做错了什么?

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我认为您需要使用 params 而不是 environment。请尝试以下操作:

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

      【讨论】:

      • 好的,谢谢。最初的问题是关于环境变量的使用。但是一个参数也应该可以解决问题。
      • 只是为了完成这个对话,@KevinBuchs 的代码可以工作,因为params 也可以作为env 变量访问。我个人觉得environment when 子句的语法不直观,所以有两个选项很好。
      最近更新 更多