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