基于管道中定义的Groovy变量的Jenkins管道阶段跳过

时间:2019-08-22 05:33:54

标签: jenkins jenkins-pipeline continuous-deployment jenkins-groovy

我正在尝试跳过基于常规变量的stage,该变量值将在另一个阶段计算。

在下面的示例中,基于环境变量Validate有条件地跳过了VALIDATION_REQUIRED阶段,我将在构建/触发Job时传递该变量。 --- 这按预期工作。

尽管Build变量设置为isValidationSuccess,但false阶段始终运行。  我尝试更改when{ return "${isValidationSuccess}" == true ; }之类的{ return "${isValidationSuccess}" == 'true' ; }条件表达式,但没有一个起作用。 打印变量时,它显示为“ false”

def isValidationSuccess = true 
 pipeline {
    agent any
    stages(checkout) {
        // GIT checkout here
    }
    stage("Validate") {
        when {
            environment name: 'VALIDATION_REQUIRED', value: 'true'
        }
        steps {
            if(some_condition){
                isValidationSuccess = false;
            }
        }
    }
    stage("Build") {
        when {
            expression { return "${isValidationSuccess}"; }
        }
        steps {
             sh "echo isValidationSuccess:${isValidationSuccess}"
             // Perform some action
        }
    }

 }
  1. 将在哪个阶段评估when条件。
  2. 是否可以使用when根据变量跳过阶段?
  3. 基于一些SO答案,我可以考虑如下添加条件块,但是when选项看起来很干净。此外,当跳过特定阶段时,stage view会很好地显示。
script {
      if(isValidationSuccess){
             // Do the build
       }else {
           try {
             currentBuild.result = 'ABORTED' 
           } catch(Exception err) {
             currentBuild.result = 'FAILURE'
           }
           error('Build not happened')
       }
}

参考: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/

1 个答案:

答案 0 :(得分:0)

stage("Build") {
        when {
            expression { isValidationSuccess == true }
        }
        steps {
             sh "echo isValidationSuccess:${isValidationSuccess}"
             // Perform some action
        }
    }

when会验证布尔值,因此应将其评估为true或false。

Source