Dans mes pipelines Jenkins, j'utilise généralement la fonction déclarative post
pour m'envoyer un e-mail en cas d'échec du pipeline.
Une syntaxe simple de la fonction post
est la suivante:
post {
failure {
mail to: '[email protected]',
subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
body: "Something is wrong with ${env.BUILD_URL}"
}
}
Dans l'e-mail ci-dessus, je veux également mentionner quelle étape (disons que le pipeline a 5 à 6 étapes) du pipeline a échoué. Comment puis je faire ça? Toute aide est très appréciée.
Une extension de l'exigence ci-dessus sera de fournir à l'utilisateur le journal des erreurs réel (de l'étape qui a échoué) également dans le cadre de l'e-mail de notification d'échec.
L'idée est que lorsqu'un utilisateur reçoit une notification d'échec de jenkins, il doit savoir quelle étape du pipeline a échoué avec le journal des erreurs.
Merci d'avance.
Il existe une variable appelée env.STAGE_NAME
que vous pouvez utiliser. Cependant, dans votre cas, vous devrez probablement stocker le nom de l'étape dans une variable différente, car lorsque vous obtenez le env.STAGE_NAME
dans une étape post
le résultat sera Declarative: Post Actions
. Au lieu de cela, vous devrez stocker le nom de l'étape dans une variable à toutes les étapes. Donc, une fois qu'une étape échoue - Jenkins ne poursuivra pas avec les étapes suivantes et vous aurez donc le nom d'étape "échoué".
Voici un exemple:
def FAILED_STAGE
pipeline {
agent { label "master" }
stages {
stage("Stage 1") {
steps {
script {
FAILED_STAGE=env.STAGE_NAME
echo "stage 1"
}
}
}
stage("Stage 2") {
steps {
script {
FAILED_STAGE=env.STAGE_NAME
echo "stage 2"
error "failed for some reason."
}
}
}
stage("Stage 3") {
steps {
script {
FAILED_STAGE=env.STAGE_NAME
echo "stage 3"
}
}
}
}
post {
failure {
echo "Failed stage name: ${FAILED_STAGE}"
}
}
}
Il pourrait y avoir une meilleure façon de le faire, mais je ne l'ai pas trouvé jusqu'à présent.
En ce qui concerne les journaux - À partir de JENKINS-40526 , vous pouvez éventuellement utiliser l'API et obtenir le fichier journal à partir de là, mais je ne suis pas sûr que vous puissiez obtenir les paramètres dont vous avez besoin dans le pipeline. L'autre solution consisterait à utiliser emailext et à envoyer par e-mail l'intégralité du fichier journal de génération:
emailext attachLog: true, body: '', compressLog: true, subject: 'Build failed.', to: '[email protected]'