web-dev-qa-db-fra.com

Comment savoir quelle étape du pipeline Jenkins a échoué

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.

12
Yash

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]'

10
tftd