J'ai un script groovy de pipeline dans Jenkins v2.19. J'ai aussi un
"Plugin Notification Slack" v2.0.1 et "Plugin Groovy Postbuild".
J'ai envoyé avec succès un message "build started" et "build completed" (si c'était le cas).
Quand une étape de construction a échoué - comment puis-je envoyer un message "Build failed" au canal Slack?
Vous pouvez faire quelque chose comme ça et utiliser un bloc catch try.
Voici quelques exemples de code:
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)
}
Un extrait complet peut être trouvé ici Modèle Jenkinsfile
Sur la base de billet de blog de Liam Newman , jetez un coup d'œil à cet extrait nettoyé pour Slack uniquement dans pipelines scriptés (utilisateurs déclarants du pipeline défiler vers le bas). Il utilise l'original résultats Jenkins , le formatage du message, de meilleures couleurs (basées sur EclEmma ), ainsi que certaines fonctionnalités de Groovy telles que arguments par défaut :
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)
}
}
La sortie ressemblera à ceci (jouez avec différents styles de formatage ici ):
Peut-être que env.JOB_NAME
Contient des barres obliques (%2F
) Qui peuvent être corrigées avec replaceAll("%2F", "/")
. Découvrez this Gist pour voir comment notifier également HipChat.
Si vous avez un pipeline déclaratif , consultez la documentation de Jenkins sur "Nettoyage et notifications" ou suivez Liam Newman -up post "Pipeline déclaratif: notifications et bibliothèques partagées" .
Juste au cas où si dans la syntaxe déclarative,
Jenkins fournit maintenant post
. Vous pouvez vérifier le résultat à la fin du pipeline.
https://jenkins.io/doc/book/pipeline/syntax/#post-example
Utilisant comme:
pipeline {
stages { ... }
post {
// only triggered when blue or green sign
success {
slackSend ...
}
// triggered when red sign
failure {
slackSend ...
}
// trigger every-works
always {
slackSend ...
}
}
}
Il serait également utilisé dans chaque stage
. Voir le lien du document s'il vous plaît.