Ich kenne keine Möglichkeit, den Fehlergrund automatisch aus der Luft zu holen.
Sie können jedoch "post {failure {" - Blöcke in jeder Phase verwenden, um mindestens die Phase zu erfassen, in der sie in eine Umgebungsvariable (z. B. env.FAILURE_REASON) fehlgeschlagen ist, und auf diese env var im letzten (globalen Bereich) Benachrichtigungsblock.
Für genauere Informationen können Sie den gleichen Mechanismus der globalen env-Variablen wiederverwenden, aber verwenden Sie try {} catch {} - Blöcke, um festzustellen, welcher bestimmte Schritt fehlgeschlagen ist.
Ein allgemeines Beispiel wäre:
pipeline {
stages {
stage('Build') {
steps {
...
}
post {
failure {
script { env.FAILURE_STAGE = 'Build' }
}
}
}
stage('Deploy') {
steps {
...
}
post {
failure {
script { env.FAILURE_STAGE = 'Deploy' }
}
}
}
...
}
post {
failure {
mail subject: "\u2639 ${env.JOB_NAME} (${env.BUILD_NUMBER}) has failed",
body: """Build ${env.BUILD_URL} is failing in ${env.FAILURE_STAGE} stage!
|Somebody should do something about that""",
to: "[email protected]",
replyTo: "[email protected]",
from: '[email protected]'
}
}
}
Rein technisch können Sie sogar einige automatisierte Triage auf der fehlerhaften Phase basierend tun und eine gezieltere Benachrichtigung oder sogar schaffen spezifische (zum Beispiel Jira) Tickets senden.
Für das Konsolenprotokoll an die E-Mail-Benachrichtigung angebracht, würden Sie bei emailext und die aussehen wollen ‚attachLog: true‘ Attribut