詹金斯声明性管道。后块中的条件语句

时间:2018-03-29 15:28:28

标签: if-statement jenkins jenkins-declarative-pipeline

拥有Jenkins管道。需要/想要在构建成功时发送电子邮件。通过电子邮件将所有分支机构发送到 maillist-1 ,并将主分支的构建过滤到 maillist-master
我尝试使用ifwhen语句 - 步骤但是它们都在后块中失败。

pipeline {
  agent ...
  stages {...}
  post{
    success{
      archiveArtifacts: ...
      if( env.BRANCH_NAME == 'master' ){
        emailext( to: 'maillist-master@domain.com'
                , replyTo: 'maillist-master@domain.com'
                , subject: 'Jenkins. Build succeeded :^) '
                , body: params.EmailBody
                , attachmentsPattern: '**/App*.tar.gz'
        )
      }
      emailext( to: 'maillist-1@domain.com'
                , replyTo: 'maillist-1@domain.com'
                , subject: 'Jenkins. Build succeeded :^) '
                , body: params.EmailBody
                , attachmentsPattern: '**/App*.tar.gz'
        )
      }
    }

}

如何实现想要的行为?

1 个答案:

答案 0 :(得分:4)

确实,您目前无法在全局帖子块中使用whenWhen必须在stage指令中使用。

使用if else是一个合理的选择,但是你需要在声明性管道中使用脚本块来实现这一点:

pipeline {
    agent any

    parameters {
        string(defaultValue: "master", description: 'Which branch?', name: 'BRANCH_NAME')
    }

    stages {
        stage('test'){
            steps {
                echo "my branch is " + params.BRANCH_NAME
            }
        }
    }

    post {
        success{
            script {
                if( params.BRANCH_NAME == 'master' ){
                    echo "mail list master"
                }
                else {
                    echo "mail list others"
                }
            }
        }
    }
}

参数为master时的输出:

[Pipeline] {
[Pipeline] stage
[Pipeline] { (test)
[Pipeline] echo
my branch is master
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
mail list master
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
当参数为'test'时输出

[Pipeline] {
[Pipeline] stage
[Pipeline] { (test)
[Pipeline] echo
my branch is test
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
mail list others
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

或者为了使其更加干净,您可以将脚本作为函数调用:

pipeline {
    agent any

    parameters {
        string(defaultValue: "master", description: 'Which branch?', name: 'BRANCH_NAME')
    }

    stages {
        stage('test'){
            steps {
                echo "my branch is " + params.BRANCH_NAME
            }
        }
    }

    post {
        success{
            getMailList(params.BRANCH_NAME)
        }
    }
}

def getMailList(String branch){
    if( branch == 'master' ){
        echo "mail list master"
    }
    else {
        echo "mail list others"
    }
}