2016-08-25 117 views
18

我在詹金斯v2.19中有一个管道groovy脚本。另外我还有一个
“Slack Notification Plugin”v2.0.1和“Groovy Postbuild Plugin”。Jenkins管道构建失败后如何发送Slack通知?

我已经成功发送消息“开始构建”和“构建完成”(如果有的话)。

当某些构建步骤失败时 - 如何向Slack通道发送消息“构建失败”?

+0

在我看来,Slack插件已经有一个“通知失败”复选框。你使用最新版本的Slack插件吗? – Riduidel

+0

@Riduidel,你可以在这里看到这个复选框? – kivagant

+0

我有一个2.0.1版本的Slack通知插件 – kivagant

回答

21

你可以这样做,并使用try catch块。

下面是一些例子代码:

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

完整的片段可以在这里Jenkinsfile Template

+0

谢谢你,@ Fahl-Design,我会稍后再试,并且会给你写结果。 – kivagant

+1

它的工作!^_^ – kivagant

+0

太棒了!享受;)正如你可以在这段代码中看到的,你可以添加任何其他通知服务slackSend –

14

基于Liam Newman's blog post找到,看看这个清理片段只松弛。它采用原Jenkins results,消息格式,更好的颜色(基于EclEmma),以及一些Groovy的功能,如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) 
    } 
} 

输出会是这样(玩不同的格式样式here):

也许env.JOB_NAME包含编码的斜杠(%2F),其可以被固定为replaceAll("%2F", "/")

查看this Gist以查看如何通知HipChat。

+0

Liam的文章似乎不可用了。 – Amida

+1

@Amida谢谢你的提示,修正它。 – beatngu13

相关问题