当管道名称以交付结尾时,如何跳过jenkinsfile管道中的阶段?

时间:2018-10-09 03:42:00

标签: jenkins-pipeline

我有2个管道,一个用于审查,一个用于部署 所以当管道审查结束时,我想跳过詹金斯文件执行 但是当部署结束时,它应该执行阶段或jenkins文件 我尝试使用if,但这是声明性管道,因此当应该使用时,如果我遇到deploy管道末端,我想避免使用when条件执行阶段

#!/usr/bin/env groovy
final boolean Deploy = (env.JOB_NAME as String).endsWith("-deploy")


pipeline {
    agent any
    parameters {
        choice(
            choices: ['greeting' , 'silence'],
            description: '',
            name: 'REQUESTED_ACTION')
    }

    stages {
//how to ouse when here to use deploy vairable to avoide execution of stage below
        stage ('Speak') {

            steps {
                echo "Hello, bitwiseman!"
            }
        }
    }
}

4 个答案:

答案 0 :(得分:1)

我也很难找到它,但是最后:

stage('Speak') {
     when {
         expression { params.REQUESTED_ACTION != 'SILENCE' }
     }
     steps {
         echo "Hello, bitwiseman!"
     }
}  

Jenkins文档,其中包含示例:https://jenkins.io/doc/book/pipeline/syntax/#when-example

答案 1 :(得分:1)

@StephenKing答案的一种替代方法(也是正确的),您可以在评估布尔值时重写when块,如下所示:

stages {
    stage('Speak') {
        when { 
            expression {
                return Deploy
            }
        }
        steps {
            echo "Hello, bitwiseman!" // Step executes only when Deploy is true

        }
    }
}

仅当变量Deploy评估为true时,这将执行阶段Deploy,否则将跳过该阶段。

答案 2 :(得分:0)

您可以使用when跳过声明式管道中的阶段,因此以下操作应该有效。

stages {
  stage('Deploy') {
    when { equals expected: true, actual: Deploy }
    steps {
      // ...
    }
  }
}

答案 3 :(得分:0)

即使您可以使用以下代码跳过某些步骤。假设REQUIRED_UPLOAD_INSTALL是一个参数。

MONGO_URI = 'mongodatabase://mongodb:27017/UTA_Enrollment'

但是它在发布步骤中不支持,甚至在when语法中也不支持。