How to send Slack notification after Jenkins pipeline build failed? How to send Slack notification after Jenkins pipeline build failed? jenkins jenkins

How to send Slack notification after Jenkins pipeline build failed?


You could do something like this and use a try catch block.

Here is some example 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)}

Complete snippet can be found here Jenkinsfile Template


Based on Liam Newman's blog post, have a look at this cleaned up snippet for Slack only in scripted pipelines (declarative pipeline users scroll down). It uses original Jenkins results, message formatting, better colors (based on EclEmma), and some Groovy features like default arguments:

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)    }}

The output will be something like this (play around with different formatting styles here):

enter image description here

Maybe env.JOB_NAME contains encoded slashes (%2F) which can be fixed with replaceAll("%2F", "/"). Check out this Gist to see how to notify HipChat as well.

If you have a declarative pipeline, have a look at the Jenkins documentation on "Cleaning up and notifications" or Liam Newman's follow-up post "Declarative Pipeline: Notifications and Shared Libraries".


Just in case if in Declarative Syntax,

Now, Jenkins provides post. You can check result at the end of pipeline.

https://jenkins.io/doc/book/pipeline/syntax/#post-example

Using like:

pipeline {    stages { ... }    post {       // only triggered when blue or green sign       success {           slackSend ...       }       // triggered when red sign       failure {           slackSend ...       }       // trigger every-works       always {           slackSend ...       }    }}

It would be used in every stage also. See the document link please.