39

ビルドが失敗したときに電子メールを送信する古いスタイルのビルド後のタスクを Jenkins パイプラインに追加するにはどうすればよいですか? パイプラインの GUI に「ビルド後のアクション」が見つかりません。ビルド スクリプト全体を try/catch でラップできることはわかっていますが、ビルド スクリプトが大きく、ジョブが手動で中止された場合でもメールを送信し続ける場合、これは見苦しく思えます。email-ext以前のベースのビルド後のアクションと同じ機能を実現したいと考えています。

try {
    // Do sth
} catch(e) {
    emailext body: '$DEFAULT_CONTENT', 
        recipientProviders: [
            [$class: 'CulpritsRecipientProvider'],
            [$class: 'DevelopersRecipientProvider'],
            [$class: 'RequesterRecipientProvider']
        ], 
        replyTo: '$DEFAULT_REPLYTO', 
        subject: '$DEFAULT_SUBJECT',
        to: '$DEFAULT_RECIPIENTS'
    throw err
}
4

6 に答える 6

55

この答えは私のJenkins版で機能しました。2.96。

ビルドの失敗時にJenkinsパイプラインの電子メールが送信されない

 pipeline {  
     agent any  
     stages {  
         stage('Test') {  
             steps {  
                 sh 'echo "Fail!"; exit 1'  
             }  
         }  
     }  
     post {  
         always {  
             echo 'This will always run'  
         }  
         success {  
             echo 'This will run only if successful'  
         }  
         failure {  
             mail bcc: '', body: "<b>Example</b><br>Project: ${env.JOB_NAME} <br>Build Number: ${env.BUILD_NUMBER} <br> URL de build: ${env.BUILD_URL}", cc: '', charset: 'UTF-8', from: '', mimeType: 'text/html', replyTo: '', subject: "ERROR CI: Project name -> ${env.JOB_NAME}", to: "foo@foomail.com";  
         }  
         unstable {  
             echo 'This will run only if the run was marked as unstable'  
         }  
         changed {  
             echo 'This will run only if the state of the Pipeline has changed'  
             echo 'For example, if the Pipeline was previously failing but is now successful'  
         }  
     }  
 }
于 2017-12-19T07:51:27.237 に答える
19

現時点では、ビルド後のアクションを取得するには、この手順をtry-と共に使用する必要があります。catch

しかし、将来的にはこのステップが計画されています (実際には検討中です)。詳細については、ブログ投稿を参照してください (宣言型パイプラインの部分を参照してください)。Jenkins Jira チケットプル リクエストも参照してください。

アップデート:

Jenkins 宣言型パイプラインpostに、各ビルドの最後に条件付きでステップを実行するセクションが追加されました。 詳細については、ドキュメントを参照してください。

post {
 always {
   sh 'echo "This will always run"'
 }
 success {
  sh 'echo "This will run only if successful"'
 }
 failure {
  sh 'echo "This will run only if failed"'
 }
 unstable {
  sh 'echo "This will run only if the run was marked as unstable"'
 }
 changed {
  sh 'echo "This will run only if the state of the Pipeline has changed"'
  sh 'echo "For example, the Pipeline was previously failing but is now successful"'
  sh 'echo "... or the other way around :)"'
 }
}
于 2016-10-01T11:15:55.673 に答える
1

上記のほとんどすべての回答は正しいですが、これはビルドが失敗したときに投稿セクションで使用しています。多分これは役に立つかもしれません

post {
always {
  script {
    if (currentBuild.currentResult == 'FAILURE') {
      step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: "abc.xyz@blabl.com", sendToIndividuals: true])
    }
  }
}
于 2020-06-24T09:19:41.113 に答える