Ich habe ein fetziges Skript für die Pipeline in Jenkins v2.19. Auch ich habe eine
"Slack Notification Plugin" v2.0.1 und "Groovy Postbuild Plugin".
Ich habe erfolgreich eine Nachricht "build started" und "build finished" gesendet (falls vorhanden).
Wenn ein Build-Schritt fehlgeschlagen ist - wie kann ich eine Meldung "Build failed" (Build fehlgeschlagen) an den Slack-Kanal senden?
Sie könnten so etwas tun und einen try catch-Block verwenden.
Hier ist ein Beispielcode:
node {
try {
notifyBuild('STARTED')
stage('Prepare code') {
echo 'do checkout stuff'
}
stage('Testing') {
echo 'Testing'
echo 'Testing - publish coverage results'
}
stage('Staging') {
echo 'Deploy Stage'
}
stage('Deploy') {
echo 'Deploy - Backend'
echo 'Deploy - Frontend'
}
} catch (e) {
// If there was an exception thrown, the build failed
currentBuild.result = "FAILED"
throw e
} finally {
// Success or failure, always send notifications
notifyBuild(currentBuild.result)
}
}
def notifyBuild(String buildStatus = 'STARTED') {
// build status of null means successful
buildStatus = buildStatus ?: 'SUCCESSFUL'
// Default values
def colorName = 'RED'
def colorCode = '#FF0000'
def subject = "${buildStatus}: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'"
def summary = "${subject} (${env.BUILD_URL})"
// Override default values based on build status
if (buildStatus == 'STARTED') {
color = 'YELLOW'
colorCode = '#FFFF00'
} else if (buildStatus == 'SUCCESSFUL') {
color = 'GREEN'
colorCode = '#00FF00'
} else {
color = 'RED'
colorCode = '#FF0000'
}
// Send notifications
slackSend (color: colorCode, message: summary)
}
Das vollständige Snippet finden Sie hier Jenkinsfile Template
Basierend auf Liam Newmans Blogpost , schauen Sie sich dieses aufgeräumte Snippet für Slack nur in geskripteten Pipelines (deklarative Pipeline-Benutzer) an runterscrollen). Es verwendet original Jenkins Ergebnisse , Nachrichtenformatierung, bessere Farben (basierend auf EclEmma ) und einige Groovy-Funktionen wie Standardargumente :
def notifySlack(String buildStatus = 'STARTED') {
// Build status of null means success.
buildStatus = buildStatus ?: 'SUCCESS'
def color
if (buildStatus == 'STARTED') {
color = '#D4DADF'
} else if (buildStatus == 'SUCCESS') {
color = '#BDFFC3'
} else if (buildStatus == 'UNSTABLE') {
color = '#FFFE89'
} else {
color = '#FF9FA1'
}
def msg = "${buildStatus}: `${env.JOB_NAME}` #${env.BUILD_NUMBER}:\n${env.BUILD_URL}"
slackSend(color: color, message: msg)
}
node {
try {
notifySlack()
// Existing build steps.
} catch (e) {
currentBuild.result = 'FAILURE'
throw e
} finally {
notifySlack(currentBuild.result)
}
}
Die Ausgabe wird ungefähr so aussehen (spielen Sie mit verschiedenen Formatierungsstilen herum hier ):
Möglicherweise enthält env.JOB_NAME
Codierte Schrägstriche (%2F
), Die mit replaceAll("%2F", "/")
korrigiert werden können. Schauen Sie sich this Gist an, um zu erfahren, wie Sie HipChat ebenfalls benachrichtigen können.
Wenn Sie eine deklarative Pipeline haben, lesen Sie die Jenkins-Dokumentation unter "Aufräumen und Benachrichtigungen" oder folgen Sie den Anweisungen von Liam Newman -up post "Deklarative Pipeline: Benachrichtigungen und gemeinsam genutzte Bibliotheken" .
Nur für den Fall, dass in deklarativer Syntax
Jetzt liefert Jenkins post
. Sie können das Ergebnis am Ende der Pipeline überprüfen.
https://jenkins.io/doc/book/pipeline/syntax/#post-example
Verwendung wie:
pipeline {
stages { ... }
post {
// only triggered when blue or green sign
success {
slackSend ...
}
// triggered when red sign
failure {
slackSend ...
}
// trigger every-works
always {
slackSend ...
}
}
}
Es würde auch in jedem stage
verwendet. Siehe bitte den Link zum Dokument.