J'utilise le pipeline déclaratif Jenkins et souhaite effectuer certaines actions après la construction en fonction du statut de la construction.
Pour être plus précis, je souhaite envoyer un courrier électronique lorsque l'état de la construction a changé (de succès en échec, de succès en instable ou d'échec en succès).
Voici mon pipeline:
pipeline {
agent none
stages {
stage('test') {
agent any
steps {
sh './tests.sh'
}
}
}
post {
changed {
// Send different emails depending on build status
// Success -> anything else
// Anything else -> Success
}
}
}
Une idée ?
Pour les conditions d'écriture, vous pouvez définir vos propres méthodes.
Par exemple, si vous souhaitez envoyer un courrier électronique uniquement lorsque le statut de la construction change:
def notifyStatusChangeViaEmail(buildStatus) {
def status
switch (buildStatus) {
case 'SUCCESS':
status = 'is now green again!'
break
case 'UNSTABLE':
status = 'has become unstable..'
break
case 'FAILURE':
status = 'has turned RED :('
break
}
emailext (
subject: "Job '${env.JOB_NAME}' ${status}",
body: "See ${env.BUILD_URL} for more details",
recipientProviders: [
[$class: 'DevelopersRecipientProvider'],
[$class: 'RequesterRecipientProvider']
]
)
}
pipeline {
...
post {
changed {
// Will trigger only when job status changes: GREEN -> RED, RED -> GREEN, etc
notifyStatusChangeViaEmail(currentBuild.currentResult)
}
}
}
Idéalement, vous voudriez également mettre la définition de la méthode notifyStatusChangeViaEmail
dans votre bibliothèque de pipeline partagée afin qu'elle puisse être réutilisée dans d'autres travaux/pipelines.
Exemple: échec & instable au succès
if (currentBuild.result == 'SUCCESS') { if(hudson.model.Result.FAILURE.equals(currentBuild.rawBuild.getPreviousBuild()?.getResult()) || hudson.model.Result.UNSTABLE.equals(currentBuild.rawBuild.getPreviousBuild()?.getResult())) {
SEND MAIL()
}
}
pour envoyer un email: https://jenkins.io/blog/2017/02/15/declarative-notifications/
Reportez-vous à ce pipeline:
post {
success {
emailext (
subject: '${DEFAULT_SUBJECT}'+'SUCESSFUL',
body: '${DEFAULT_CONTENT}',
to: '${EMAIL_RECIPIENTS}'
);
slackSend (color: 'good', message: ":csp_operational: ${env.JOB_NAME} - #${env.BUILD_NUMBER} Success (<${env.BUILD_URL}|Open>)");
}
failure {
emailext (
subject: '${DEFAULT_SUBJECT}'+'FAILED!',
body: '${DEFAULT_CONTENT}',
to: '${EMAIL_RECIPIENTS}'
);
slackSend (color: 'danger', message: ":x: ${env.JOB_NAME} - #${env.BUILD_NUMBER} Failure (<${env.BUILD_URL}|Open>)");
}
}
Vous pouvez définir les paramètres de messagerie par défaut en utilisant Extended Email Plugin, Jenkins-> Configurer Jenkins -> Extended Email Configuration.