一尘不染

如何在Jenkins声明式管道中发送“恢复正常”通知?

jenkins

我正在尝试将现有的Jenkins管道转换为新的声明性管道,我想知道如何正确处理邮件通知?

我目前正在使用此代码:

node {
   try {

      ...

      currentBuild.result = 'SUCCESS'
   } catch (any) {
       currentBuild.result = 'FAILURE'
       throw any
   } finally {
       step([$class: 'Mailer',
           notifyEveryUnstableBuild: true,
           recipients: "baptiste.wicht@gmail.com",
           sendToIndividuals: true])
   }
}

它运作良好,但我看不到如何使用新的声明性语法。我认为可以通过使用post()和其他通知来完成某些操作,但我不知道具体如何做。我已经试过了:

post {
    always {
        step([$class: 'Mailer',
            notifyEveryUnstableBuild: true,
            recipients: "baptiste.wicht@gmail.com",
            sendToIndividuals: true])
    }
}

但是问题在于它不会发送任何“返回正常”邮件。

我如何在Jenkins声明性管道中使用Mailer插件来发送“返回正常”邮件?

是否应该再次对所有声明性语法使用try / catch?


阅读 271

收藏
2020-07-25

共1个答案

一尘不染

问题在于,在声明式的post部分中,currentBuild.result未设置为SUCCESS。虽然设置了FAILURE和ABORTED。因此,此刻的行为目前似乎不一致。

我改进了如何为Jenkins管道获得相同的Mailer行为以更好地处理这种情况的答案:

pipeline {
  agent any
  stages {
      stage('test') {
        steps {
            echo 'some steps'        
            // error("Throw exception for testing purpose..")
        }
      }
  }
  post {
      always {
          script {
              if (currentBuild.result == null) {
                  currentBuild.result = 'SUCCESS'    
              }
          }    
          step([$class: 'Mailer',
            notifyEveryUnstableBuild: true,
            recipients: "test@test.com",
            sendToIndividuals: true])
      }
  }
}
2020-07-25