Декларативный конвейер Дженкинса. Условный оператор в почтовом блоке

Иметь конвейер Дженкинса. Нужно/хотите отправлять электронные письма, когда сборка завершается успешно. Отправлять сообщения обо всех ветвях на maillist-1 и фильтровать сборки главной ветки на maillist-master.
Я пытался использовать инструкции-шаги if и when, но оба они терпят неудачу. в почтовом блоке.

pipeline {
  agent ...
  stages {...}
  post{
    success{
      archiveArtifacts: ...
      if( env.BRANCH_NAME == 'master' ){
        emailext( to: '[email protected]'
                , replyTo: '[email protected]'
                , subject: 'Jenkins. Build succeeded :^) ????'
                , body: params.EmailBody
                , attachmentsPattern: '**/App*.tar.gz'
        )
      }
      emailext( to: '[email protected]'
                , replyTo: '[email protected]'
                , subject: 'Jenkins. Build succeeded :^) ????'
                , body: params.EmailBody
                , attachmentsPattern: '**/App*.tar.gz'
        )
      }
    }

}

Как можно добиться желаемого поведения?


person kyb    schedule 29.03.2018    source источник


Ответы (1)


Это правда, что в настоящее время вы не можете использовать when в глобальном почтовом блоке. When должен использоваться внутри директивы 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"
                }
            }
        }
    }
}

Вывод, когда параметр является ведущим:

[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

вывод, когда параметр «тест»:

[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"
    }
}
person lvthillo    schedule 29.03.2018
comment
а если он находится за пределами блока script? - person ambes; 15.11.2018