Отправить письмо по неисправности трубопровода jenkins

Как я могу добавить к конвейеру jenkins старую задачу post-build, которая отправляет электронную почту, когда сборка не выполняется? Я не могу найти "Действия после сборки" в графическом интерфейсе для конвейера. Я знаю, что я могу обернуть весь скрипт сборки try/catch, однако это кажется уродливым, когда сценарий сборки большой и продолжает отправлять электронные письма, даже когда работа была прервана вручную. Я хотел бы достичь такой же функциональности, как и в случае действия post-build на основе previouse 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
}

Ответ 1

Этот ответ сработал на моей Jenkins ver. 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: "[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'  
         }  
     }  
 }

Ответ 2

На данный момент вы должны использовать эту процедуру с помощью try catch чтобы получить действие после сборки.

Но в будущем этот шаг запланирован (на самом деле он находится в обзоре). Вы можете прочитать сообщение в блоге для получения дополнительной информации (см. Декларативную часть конвейера). См. Также билет Дженкинса Джиры и запрос на вытягивание.

Обновить:

В декларативном конвейере 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 :)"'
 }
}

Ответ 3

Для принятия мер только при изменении статуса сборки вы можете использовать пост> измененный блок.

И для проверки того, в каком состоянии статус изменился, вы можете использовать блок сценария в сочетании с проверкой значения свойства 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'
                }
            }
        }
    }

}

Ответ 4

Это хорошо работает на моем 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'
            }
        }
    }

Вы можете контролировать электронную почту для неудачной сборки или изменения статуса