web-dev-qa-db-ja.com

ジェンキンスパイプラインの障害に関するメールを送信する

ビルドが失敗したときに電子メールを送信する古いスタイルのビルド後タスクを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
}
22
Mariusz Jamro

この答えは私のJenkins ver。 2.96。

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

 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: "[email protected]";  
         }  
         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'  
         }  
     }  
 }
28
kujiy

ビルドステータスが変更されたときにのみアクションを実行するには、 post> changed block を使用できます。

また、ステータスを変更した状態を確認するには、 スクリプトブロックcurrentBuild.currentResultプロパティの値の確認と組み合わせて使用​​できます。

そのようです:

pipeline {
    ...

    post {
        changed {
            script {
                if (currentBuild.currentResult == 'FAILURE') { // Other values: SUCCESS, UNSTABLE
                    // Send an email only if the build status has changed from green/unstable to red
                    emailext subject: '$DEFAULT_SUBJECT',
                        body: '$DEFAULT_CONTENT',
                        recipientProviders: [
                            [$class: 'CulpritsRecipientProvider'],
                            [$class: 'DevelopersRecipientProvider'],
                            [$class: 'RequesterRecipientProvider']
                        ], 
                        replyTo: '$DEFAULT_REPLYTO',
                        to: '$DEFAULT_RECIPIENTS'
                }
            }
        }
    }

}
15
Jonas Masalskis

現時点では、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 :)"'
 }
}
15
ansib

これは、宣言パイプラインを使用して、私のJenkins(現在のバージョン2.164.2およびemailext)でうまく機能しています。

    pipeline {
    ...

    environment {
            EMAIL_TO = '[email protected]'
        }
    post {
            failure {
                emailext body: 'Check console output at $BUILD_URL to view the results. \n\n ${CHANGES} \n\n -------------------------------------------------- \n${BUILD_LOG, maxLines=100, escapeHtml=false}', 
                        to: EMAIL_TO, 
                        subject: 'Build failed in Jenkins: $PROJECT_NAME - #$BUILD_NUMBER'
            }
            unstable {
                emailext body: 'Check console output at $BUILD_URL to view the results. \n\n ${CHANGES} \n\n -------------------------------------------------- \n${BUILD_LOG, maxLines=100, escapeHtml=false}', 
                        to: EMAIL_TO, 
                        subject: 'Unstable build in Jenkins: $PROJECT_NAME - #$BUILD_NUMBER'
            }
            changed {
                emailext body: 'Check console output at $BUILD_URL to view the results.', 
                        to: EMAIL_TO, 
                        subject: 'Jenkins build is back to normal: $PROJECT_NAME - #$BUILD_NUMBER'
            }
        }
    }

失敗したビルドまたは変更されたステータスの電子メールを制御できます。また、ビルドログをメール本文に入れました

1
Milan