If statement Jenkins声明性管道。post块中的条件语句

If statement Jenkins声明性管道。post块中的条件语句,if-statement,jenkins,jenkins-declarative-pipeline,If Statement,Jenkins,Jenkins Declarative Pipeline,有一个詹金斯管道。需要/希望在构建成功时发送电子邮件。将有关所有分支的电子邮件发送至maillist-1,并将主分支的筛选版本发送至maillist master。 我尝试使用if和when语句执行步骤,但它们都在post块中失败 pipeline { agent ... stages {...} post{ success{ archiveArtifacts: ... if( env.BRANCH_NAME == 'master' ){

有一个詹金斯管道。需要/希望在构建成功时发送电子邮件。将有关所有分支的电子邮件发送至maillist-1,并将主分支的筛选版本发送至maillist master。
我尝试使用
if
when
语句执行步骤,但它们都在post块中失败

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 :^) It's true you currently can't use 
when
in the global post block.
When
must be used inside a stage directive.

It's a logical choice to use
if else
, but you'll need a scripted block inside the declarative pipeline to make this work:

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'){
emailext(收件人:'邮件列表-master@domain.com'
,回复:'邮件列表-master@domain.com'

,主题:'Jenkins.Build successed:^)确实,当前不能在全局post块中使用
时。
时必须在stage指令中使用

使用
if-else
是一种合乎逻辑的选择,但您需要在声明性管道中使用脚本块来实现这一点:

[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
参数为master时的输出:

[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"
    }
}
或者,为了使脚本更清晰,可以将脚本作为函数调用:


如果它在
脚本
块之外,该怎么办?