前言
在使用Jenkins进行业务构建中,可以使用支持webhook的企业通讯软件进行通知。常见的有飞书 lark 钉钉 企微等。其使用webhook的方式大同小异。
准备
创建机器人
在群中创建webhook机器人。一般来说使用webhook机器人使用一下集中方式来进行简单得安全设置:
- 来源IP
- 关键字
- 密钥

这里没有所谓绝对的优劣,选择适合自己的方式即可。
测试消息
一般情况都是通过构建一个json,满足安全设置并通过post方式发送到webhook地址既可以实现消息的发送。
message='{"msg_type": "text", "content": {"text": "这是一条通过curl直接构造发送的测试消息 2022-12.12"}}'
curl -H "Content-Type: application/json" -X POST -d "$message" https://open.larksuite.com/open-api/bot/v2/hook/your_webhook_idpipeline中实现
在pipeline中其实并没有什么特殊的,只是pipeline是groovy语法,在和shell结合的时候需要规避一些容易出现问题的点,比如变量的使用,以及引号的嵌套等。这些可以在上一篇文档中有提到Jenkins的Pipeline中变量的使用。
我的目标是构建成功和失败的时候发送不同的信息,为了简化逻辑,在environment中定义两个字符串来定义发送成功与失败的json字符串。
environment {
git_url = "${params.git_url}"
git_branch = "${params.git_branch}"
'
//定义需要上传的SWR组织名称
organization = 'test'
build_name = "${params.build_name}"
apiserver = 'https://192.168.1.1:5443'
k8s_namespace = 'test'
k8s_deployment = "${build_name}"
currentTime = sh(returnStdout: true, script: 'date +"%m%d%Y %H:%M:%S"').trim()
msg_success = """
{
"msg_type": "post",
"content":
{"post": {"zh_cn": {"title": "项目更新通知","content": [[
{"tag": "text","text": "项目更新通知: ${k8s_namespace} 项目:${k8s_deployment} 分支:${git_branch}分支 发布成功 $currentTime"}
]]}}}
}
"""
msg_fail = """
{
"msg_type": "post",
"content":
{"post": {"zh_cn": {"title": "项目更新通知","content": [[
{"tag": "text","text": "项目更新通知: ${k8s_namespace} 项目:${k8s_deployment} 分支:${git_branch}分支 发布失败 $currentTime"}
]]}}}
}
"""
}在post部分,如果构建成功,就是用上文中的msg_success,如果失败就使用msg_fail。
post {
success {
echo 'I succeeeded :)'
script {
sh """
curl -X POST -H "Content-Type: application/json" -d '${env.msg_success}' 'https://open.larksuite.com/open-api/bot/v2/hook/your_webhook_id'
"""
}
}
failure {
echo 'I failed :('
script {
sh """
curl -X POST -H "Content-Type: application/json" -d '${env.msg_fail}' 'https://open.larksuite.com/open-api/bot/v2/hook/your_webhook_id'
"""
}
}效果如下:

结语
本文使用lark(飞书国际版)作为验证。其他的基本大同小异。相比较,钉钉在富文本上能实现更多的样式。
















