Utiliser Jenkins 'Mailer' à l'intérieur du pipeline de flux de travail
J'aimerais profit de l' Mailer plugin Jenkins dans un Jenkinsfile
qui définit un pipeline de travail. Compte tenu de l'suivantes simple erreur de script je m'attends à un e-mail à chaque génération.
#!groovy
stage 'Test'
node {
try {
sh 'exit 1'
} finally {
step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: '[email protected]', sendToIndividuals: true])
}
}
La sortie de la compilation est:
Started by user xxxxx
[Pipeline] stage (Test)
Entering stage Test
Proceeding
[Pipeline] node
Running on master in /var/lib/jenkins/jobs/rpk-test/workspace
[Pipeline] {
[Pipeline] sh
[workspace] Running shell script
+ exit 1
[Pipeline] step
[Pipeline] }
[Pipeline] //node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE
Comme vous pouvez le voir, il n'enregistrer qu'il effectue le pipeline step
immédiatement après l'échec, mais pas de courriels se produit.
E-mails dans d'autres free-style emplois qui tirent parti de la mailer
beau travail, tout en invoquant via des travaux de canalisation.
C'est en cours d'exécution avec Jenkins 2.2 et mailer 1.17.
Est-il un autre mécanisme par lequel je devrais être en invoquant échec lors de la construction des e-mails? Je n'ai pas besoin de tous les frais généraux de la mail
étape, il faut juste les notifications sur les échecs et les recouvrements.
- Est-ce utile? stackoverflow.com/questions/36948606/...
- Très proche de ce que j'ai essayé de faire, mais se réfère plus à l'utilisation de la messagerie plugin après un échec. La pièce manquante est détaillée dans la réponse ci-dessous dans la façon dont le statut est fixé au cours de la canalisation processus, ce qui est nécessaire pour les plugins qui utilisent un non-dans l'attente de bâtir de l'état.
Vous devez vous connecter pour publier un commentaire.
Dans le Pipeline a échoué
sh
ne pas régler immédiatement lacurrentBuild.result
àFAILURE
alors que sa valeur initiale estnull
. Donc créer des étapes qui dépendent de l'état de création comme Mailer pourrait fonctionner apparemment incorrect.Vous pouvez le vérifier par l'ajout d'un débogage d'impression:
Tout ce pipeline est enveloppé avec le gestionnaire d'exceptions prévues par Jenkins, c'est pourquoi Jenkins marque le construire comme échoué dans le la fin.
Donc, si vous voulez utiliser Mailer vous avez besoin pour maintenir l'état de création correctement.
Par exemple:
Si vous n'avez pas besoin de renvoyer l'exception que vous pouvez utiliser
catchError
. C'est un Pipeline intégré dans lequel les captures aucune exception à l'intérieur de son champ d'application, il imprime dans la console et des jeux de l'état de création. Exemple:currentBuild.result = 'SUCCESS'
à la fin du bloc try (après sh "exit 1').En plus de izzekil excellente réponse, vous pouvez choisir les destinataires de courrier électronique basé sur la validation des auteurs. Vous pouvez utiliser e-mail-ext pour ce faire (basé sur leur pipeline exemples):
Si vous utilisez un récent e-mail-ext (2.50+), vous pouvez l'utiliser dans votre pipeline:
Si vous n'êtes pas à l'aide d'un déclaratif Jenkinsfile, vous aurez besoin de mettre
checkout scm
donc Jenkins pouvez trouver les développeurs. Voir JENKINS-46431.Si vous êtes encore sur une ancienne version de e-mail-ext, vous serez frappé de JENKINS-25267. Vous pourriez rouler votre propre code HTML e-mail:
emailext
est disponible?sendToIndividuals: true
déjà envoyer un e-mail à la validation des auteurs?Je pense qu'un meilleur moyen d'envoyer des notifications par courrier électronique dans jenkins pipelines est d'utiliser la section de poteau d'un pipeline comme décrit dans la jenkins docs au lieu d'utiliser try catch:
currentBuild.result
en poste.toujours l'article?currentBuild.result
est corrigé sur ce point, comme c'est un post d'action. Vous ne pouvez lire le résultat.script { if (currentBuild.result == null) { currentBuild.result = 'SUCCESS' } }
juste avant laMailer
étape.