Jenkins构建完成后发送飞书通知消息,网上搜索了一圈,提供的方案基本都是python或者shell脚本
代码量较大,配置起来也麻烦,以下提供了一个简易,且高效可靠的版本,实测生产可用。
1.添加飞书机器人
根据飞书文档操作就行,主要是拿到webhook地址,把它保存下来。飞书机器人
2.Jenkins添加凭据
依次点击 系统管理 -> 凭据管理 > 新增凭据 -> 选择secret text

注意,这里的id必须与下面脚本中的credentialsId完全一致,否则会失败,因为没获取到正确凭据

3.编写Jenkins脚本
飞书消息有3种类型,普通文本,富文本,消息卡片,这里使用飞书富文本消息,展示的信息已经足够多,如果想要更好的展示效果,可以使用飞书卡片,但是配置极其复杂,不太推荐,感兴趣的可自行查看飞书文档。
pipeline {
...
stages {
// 自定义构建步骤,根据需求来,此处不赘述
...
}
post {
success {
script {
sendFeishuNotify(true)
}
}
failure {
script {
sendFeishuNotify(false)
}
}
}
}
def sendFeishuNotify(boolean success) {
def buildTime = new Date().format("yyyy-MM-dd HH:mm:ss")
def duration = (currentBuild.duration / 1000) as int
def jobName = env.JOB_NAME
def branch = env.BRANCH_NAME ?: 'unknown'
def buildNumber = env.BUILD_NUMBER
def appVersion = env.APP_VERSION
def buildUrl = env.BUILD_URL
def status = success ? '成功' : '失败'
// docker私服地址,没有docker和镜像私服的可以去掉,jsonBody消息中的内容也记得去掉
def imageLine = (success && env.FULL_IMAGE) ? "镜像地址: ${env.FULL_IMAGE}" : ''
def jsonBody = """
{
"msg_type": "post",
"content": {
"post": {
"zh-CN": {
"title": "Jenkins构建${status}通知!",
"content": [
[
{
"tag": "text",
"text": "${jobName} ${branch}分支 构建${status} \\n"
},
{
"tag": "text",
"text": "构建时间:${buildTime} 耗时:${duration}s \\n"
},
{
"tag": "text",
"text": "版本:${appVersion} 构建编号:${buildNumber} \\n"
},
{
"tag": "a",
"text": "点击查看Jenkins \\n",
"href": "${buildUrl}"
}
],
[
{
"tag": "text",
"text": "${imageLine}"
}
]
]
}
}
}
}
"""
withCredentials([string(credentialsId: 'FEISHU_WEBHOOK_URL', variable: 'WEBHOOK_URL')]) {
sh """
curl -X POST \
-H 'Content-Type: application/json' \
-d '${jsonBody}' \
"\$WEBHOOK_URL"
"""
}
}