声明式管道中的条件输入步骤

时间:2018-10-13 16:28:17

标签: jenkins-pipeline

使用Jenkins v2.138.2和工作流聚合器v2.6,我试图定义一个条件input步骤,该步骤取决于作业参数的值,如下所示:

stage('apply') {

  when { expression { params.apply_plan != 'no' } }

  if (params.apply_plan != 'yes') {
    input {
      message 'Apply this plan?'
    }
  }

  steps {
    withAWS(region: 'us-east-1', role: assume_role) {
      dir(path: tf_dir) {
        sh "make apply"
      }
    }
  }
}

但是这种if { ( ... ) input { ...} }语法给我一个运行时错误:

  

java.lang.ClassCastException:org.jenkinsci.plugins.workflow.support.steps.input.InputStep.message需要类java.lang.String但收到了org.jenkinsci.plugins.workflow.cps.CpsClosure2

有什么想法吗?

谢谢, 克里斯

1 个答案:

答案 0 :(得分:1)

我认为您在这里使用了错误的语法。 input { … }仅作为指令有效(在steps下方stage的外部)。您要使用的是here中描述的input步骤。基本上,您只需要除去花括号并将其放入script中的steps中:

stage("stage") {
    steps {
        script {
            if (params.apply_plan != 'yes') {
                input message: 'Apply this plan?'
            }
        }
        withAWS(region: 'us-east-1', role: assume_role) {
            dir(path: tf_dir) {
                sh "make apply"
            }
         }
     }
 }