Comment puis-je ajouter à un pipeline jenkins une tâche post-génération de style ancien qui envoie un courrier électronique lorsque la construction échoue? Je ne parviens pas à trouver les "actions de post-construction" dans l'interface graphique d'un pipeline. Je sais que je peux envelopper le script de construction entier try/catch, mais cela semble moche quand le script de construction est volumineux et continue d'envoyer des courriels même si le travail a été annulé manuellement. Je souhaite obtenir les mêmes fonctionnalités qu'avec le précédent email-ext
action post-construction basée.
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
}
Cette réponse a fonctionné sur mon ver Jenkins. 2,96.
Email du pipeline Jenkins non envoyé en cas d'échec de la construction - Dépassement de pile
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'
}
}
}
Pour prendre des mesures uniquement lorsque le statut de construction a changé, vous pouvez utiliser le post> bloc modifié .
Et pour vérifier, dans quel état le statut a changé, vous pouvez utiliser le bloc de script en combinaison avec la vérification de la valeur de currentBuild.currentResult
propriété.
Ainsi:
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'
}
}
}
}
}
Pour le moment, vous devez utiliser cette procédure avec un try
-catch
pour obtenir une action post-build.
Mais à l'avenir, cette étape est planifiée (en réalité, elle est en cours de révision). Vous pouvez lire l'article du blog pour plus d'informations (voir la partie déclarative du pipeline). Voir aussi le le ticket Jenkins Jira et la demande d'extraction .
Le pipeline déclaratif Jenkins a maintenant la section post
qui exécutera les étapes de manière conditionnelle à la fin de chaque génération. Voir la documentation pour plus d'informations.
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 :)"'
}
}
Cela fonctionne bien sur mon Jenkins (version 2.164.2 actuelle et emailext) avec pipeline déclaratif:
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'
}
}
}
Vous pouvez contrôler le courrier électronique en cas d'échec de la construction ou du statut modifié. Aussi, j'ai mis le journal de construction dans le corps de l'email