notifier jenkins groovy jenkins-pipeline slack

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.