notifier - ¿Cómo enviar una notificación de Slack después de que fallara la compilación de Jenkins?
jenkins slack (3)
Basado en la publicación del blog de Liam Newman , eche un vistazo a este fragmento de código limpiado para Slack solo en canalizaciones con guión (los usuarios de canalización declarativa se desplazan hacia abajo). Utiliza los resultados originales de Jenkins , el formato de los mensajes, los mejores colores (basados en EclEmma ) y algunas características de Groovy, como los argumentos predeterminados :
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 salida será algo como esto (juegue con diferentes estilos de formato here ):
Tal vez env.JOB_NAME
contiene barras codificadas ( %2F
) que se pueden arreglar con replaceAll("%2F", "/")
. Echa un vistazo a este Gist para ver cómo notificar a HipChat también.
Si tiene un canal declarativo , consulte la documentación de Jenkins sobre "Limpieza y notificaciones" o la publicación de seguimiento de Liam Newman "Canal declarativo: Notificaciones y bibliotecas compartidas" .
Tengo un script groovy pipeline en Jenkins v2.19. Tambien tengo un
"Slack Notification Plugin" v2.0.1 y "Groovy Postbuild Plugin".
He enviado con éxito un mensaje "compilación iniciada" y "compilación terminada" (si la hubiera).
Cuando algunos pasos de compilación fallaron, ¿cómo puedo enviar un mensaje "Fallo de compilación" al canal Slack?
Podrías hacer algo como esto y usar un bloque try catch.
Aquí hay un código de ejemplo:
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)
}
Fragmento completo se puede encontrar aquí Plantilla Jenkinsfile
Por si acaso si en la sintaxis declarativa,
Ahora, Jenkins proporciona post
. Puede comprobar el resultado al final de la tubería.
https://jenkins.io/doc/book/pipeline/syntax/#post-example
Usando como
pipeline {
stages { ... }
post {
// only triggered when blue or green sign
success {
slackSend ...
}
// triggered when red sign
failure {
slackSend ...
}
// trigger every-works
always {
slackSend ...
}
}
}
Sería utilizado en cada stage
también. Vea el enlace del documento por favor.