从Jenkins向Slack发送通知的groovy或pipleline脚本

从Jenkins向Slack发送通知的groovy或pipleline脚本,groovy,jenkins-pipeline,webhooks,slack,Groovy,Jenkins Pipeline,Webhooks,Slack,我需要使用Webhook从jenkins向slack发送通知。我很清楚notifier插件,但为此,我需要在客户端不想提供的空闲时间访问它。他们提供了Webhook url的详细信息。任何人都知道我如何发布通知(作业名称、链接、运行它的用户以及错误原因(if))来放松(正如Matt评论的那样,我们使用curl来完成这项工作。我们将它放在一个共享库中,并从管道中调用它,下面是示例代码。还有改进的余地,但应该会让你继续前进 import groovy.json.JsonOutput def sen

我需要使用Webhook从jenkins向slack发送通知。我很清楚notifier插件,但为此,我需要在客户端不想提供的空闲时间访问它。他们提供了Webhook url的详细信息。任何人都知道我如何发布通知(作业名称、链接、运行它的用户以及错误原因(if))来放松(正如Matt评论的那样,我们使用curl来完成这项工作。我们将它放在一个共享库中,并从管道中调用它,下面是示例代码。还有改进的余地,但应该会让你继续前进

import groovy.json.JsonOutput

def sendBuildNotification(sharedVars, String buildStatus = 'STARTED', String slackHeading = 'BUILD') {

    // Build status of null means success.
    buildStatus = buildStatus ?: 'SUCCESS'
    // Default image is normal Jenkins
    image =':jenkins:'
    long epoch = System.currentTimeMillis()/1000

    // Determine Color
    def color
    if (buildStatus == 'STARTED' || buildStatus == 'ABORTED') {
        color = '#D4DADF' // Grey
    } else if (buildStatus == 'SUCCESS') {
        color = '#319b20' // Green
    } else if (buildStatus == 'UNSTABLE' || buildStatus == 'INPUT REQUIRED') {
        color = '#ff8316' // Yellow
    } else {
        color = '#f44242' // Red
        image=':badjenkins:'
    }

    // Create JSON Payload
    def json = JsonOutput.toJson(
        [
            username: "${slackHeading} ${buildStatus}",
            channel: "${insertChannel}",
            icon_emoji: image,
            attachments: [[
                title: "Job: ${env.JOB_NAME}/${env.BUILD_NUMBER}",
                title_link: "${env.BUILD_URL}console",
                fallback: "Jenkins Job Alert - ${buildStatus} - ${env.JOB_NAME}", 
                color: color,
                fields: [[
                    title: "Repository",
                    value: "<${insert SCM Host}/${env.GIT_REPO_NAME}|${env.GIT_REPO_NAME}>",
                    short: true
                ],[
                    title: "Branch",
                    value: "<${insert SCM Host}/${env.GIT_REPO_NAME}/tree/${BRANCH_NAME}|${BRANCH_NAME}>",
                    short: true
                ],[
                    title: "Last Commit",
                    value: "<${insert SCM Host}/${env.GIT_REPO_NAME}/commit/${sharedVars.gitCommit}|${sharedVars.gitCommit}>",
                    short: false
                ]],
                footer: "<@${env.BUILD_USER_ID}>",
                ts: epoch,
                mrkdwn_in: ["footer", "title"],
            ]]
        ]
    )

    try {
        // Post to Slack
        sh "curl -X POST -H 'Content-type: application/json' --data '${json}' ${slackURL} --max-time 5"
    } catch (err) {
        echo "${err} Slack notify failed, moving on"
    }
}
import groovy.json.JsonOutput
def sendBuildNotification(sharedVars,字符串buildStatus='STARTED',字符串slackHeading='BUILD'){
//构建状态为null表示成功。
buildStatus=buildStatus?:“成功”
//默认图像是正常的Jenkins
图像=':詹金斯:'
长历元=System.currentTimeMillis()/1000
//定色
def颜色
如果(buildStatus='STARTED'| | buildStatus=='ABORTED'){
颜色='#D4DADF'//灰色
}else if(buildStatus='SUCCESS'){
颜色='#319b20'//绿色
}else if(buildStatus==“不稳定”| | buildStatus==“需要输入”){
颜色='#ff8316'//黄色
}否则{
颜色='#f44242'//红色
图像=':badjenkins:'
}
//创建JSON负载
def json=JsonOutput.toJson(
[
用户名:“${slackHeading}${buildStatus}”,
频道:“${insertChannel}”,
icon_表情符号:图像,
附件:[[
标题:“作业:${env.Job_NAME}/${env.BUILD_NUMBER}”,
标题链接:“${env.BUILD\u URL}控制台”,
回退:“Jenkins作业警报-${buildStatus}-${env.Job_NAME}”,
颜色:颜色,
字段:[[
标题:“存储库”,
值:“”,
短:对
],[
标题:“分支机构”,
值:“”,
短:对
],[
标题:“最后一次提交”,
值:“”,
短:错
]],
页脚:“,
ts:时代,
mrkdwn_in:[“页脚”、“标题”],
]]
]
)
试一试{
//放松
sh“curl-X POST-H”内容类型:application/json'--data'${json}'${slackURL}--max time 5”
}捕捉(错误){
echo“${err}Slack notify失败,继续”
}
}

正如马特评论的那样,我们使用curl来实现这一点。我们将它放在一个共享库中,并从管道中调用它,下面是示例代码。还有改进的余地,但应该会让你继续前进

import groovy.json.JsonOutput

def sendBuildNotification(sharedVars, String buildStatus = 'STARTED', String slackHeading = 'BUILD') {

    // Build status of null means success.
    buildStatus = buildStatus ?: 'SUCCESS'
    // Default image is normal Jenkins
    image =':jenkins:'
    long epoch = System.currentTimeMillis()/1000

    // Determine Color
    def color
    if (buildStatus == 'STARTED' || buildStatus == 'ABORTED') {
        color = '#D4DADF' // Grey
    } else if (buildStatus == 'SUCCESS') {
        color = '#319b20' // Green
    } else if (buildStatus == 'UNSTABLE' || buildStatus == 'INPUT REQUIRED') {
        color = '#ff8316' // Yellow
    } else {
        color = '#f44242' // Red
        image=':badjenkins:'
    }

    // Create JSON Payload
    def json = JsonOutput.toJson(
        [
            username: "${slackHeading} ${buildStatus}",
            channel: "${insertChannel}",
            icon_emoji: image,
            attachments: [[
                title: "Job: ${env.JOB_NAME}/${env.BUILD_NUMBER}",
                title_link: "${env.BUILD_URL}console",
                fallback: "Jenkins Job Alert - ${buildStatus} - ${env.JOB_NAME}", 
                color: color,
                fields: [[
                    title: "Repository",
                    value: "<${insert SCM Host}/${env.GIT_REPO_NAME}|${env.GIT_REPO_NAME}>",
                    short: true
                ],[
                    title: "Branch",
                    value: "<${insert SCM Host}/${env.GIT_REPO_NAME}/tree/${BRANCH_NAME}|${BRANCH_NAME}>",
                    short: true
                ],[
                    title: "Last Commit",
                    value: "<${insert SCM Host}/${env.GIT_REPO_NAME}/commit/${sharedVars.gitCommit}|${sharedVars.gitCommit}>",
                    short: false
                ]],
                footer: "<@${env.BUILD_USER_ID}>",
                ts: epoch,
                mrkdwn_in: ["footer", "title"],
            ]]
        ]
    )

    try {
        // Post to Slack
        sh "curl -X POST -H 'Content-type: application/json' --data '${json}' ${slackURL} --max-time 5"
    } catch (err) {
        echo "${err} Slack notify failed, moving on"
    }
}
import groovy.json.JsonOutput
def sendBuildNotification(sharedVars,字符串buildStatus='STARTED',字符串slackHeading='BUILD'){
//构建状态为null表示成功。
buildStatus=buildStatus?:“成功”
//默认图像是正常的Jenkins
图像=':詹金斯:'
长历元=System.currentTimeMillis()/1000
//定色
def颜色
如果(buildStatus='STARTED'| | buildStatus=='ABORTED'){
颜色='#D4DADF'//灰色
}else if(buildStatus='SUCCESS'){
颜色='#319b20'//绿色
}else if(buildStatus==“不稳定”| | buildStatus==“需要输入”){
颜色='#ff8316'//黄色
}否则{
颜色='#f44242'//红色
图像=':badjenkins:'
}
//创建JSON负载
def json=JsonOutput.toJson(
[
用户名:“${slackHeading}${buildStatus}”,
频道:“${insertChannel}”,
icon_表情符号:图像,
附件:[[
标题:“作业:${env.Job_NAME}/${env.BUILD_NUMBER}”,
标题链接:“${env.BUILD\u URL}控制台”,
回退:“Jenkins作业警报-${buildStatus}-${env.Job_NAME}”,
颜色:颜色,
字段:[[
标题:“存储库”,
值:“”,
短:对
],[
标题:“分支机构”,
值:“”,
短:对
],[
标题:“最后一次提交”,
值:“”,
短:错
]],
页脚:“,
ts:时代,
mrkdwn_in:[“页脚”、“标题”],
]]
]
)
试一试{
//放松
sh“curl-X POST-H”内容类型:application/json'--data'${json}'${slackURL}--max time 5”
}捕捉(错误){
echo“${err}Slack notify失败,继续”
}
}

尝试使用
curl
。尝试使用
curl