Jenkins配置钉钉通知

Jenkins配置钉钉通知

说起来添加钉钉通知的原理很简单,钉钉生成一个订阅地址(API接口),Jenkins相关步骤去调用这个订阅地址即达到通知效果。

创建钉钉机器人

注意:钉钉机器人需要群主开放权限才能创建。

建群,打开【群设置】->【智能群助手】->【添加机器人】->【自定义 WebHook接入】

安全设置选三者之一。这里我选择【自定义关键词】方式。

点击完成后会有一串webhook接口地址,也需记住。

安装钉钉插件

打开Jenkins的Dashboard,安装插件。

打开【系统管理】->【插件管理】,安装"DingTalk"插件并重启。

打开【系统管理】->【系统配置】翻到“钉钉”配置位置,新增配置。

机器人Id不用填,保存时自动分配,在webhook上添加顶顶机器人接口地址,加密处添加加签密码。

点击测试,钉钉群会收到配置信息。

安装用户构建插件

安装用户构建插件“build user vars”,安装步骤同上。

可获得如下参数

Variable Description
BUILD_USER Full name (first name + last name)
BUILD_USER_FIRST_NAME First name
BUILD_USER_LAST_NAME Last name
BUILD_USER_ID Jenkins user ID
BUILD_USER_GROUPS Jenkins user groups
BUILD_USER_EMAIL Email address

安装后还要在【系统管理】->【系统配置】滑到【Build User Variables】选项,勾选生效。勾选后直接在全局变量中生效。否则需要用warp包装使用。

包装使用

always {
    echo 'This will always run'
    wrap([$class: 'BuildUser']) {
        sh 'echo "${BUILD_USER}"'
    }
}

钉钉机器人开发权限

不确定是否一定要机器人开发权限。我是遇到webhook地址curl失败的问题,然后让管理员给了钉钉机器人开发权限。

开通方式参照如下地址。

https://developers.dingtalk.com/document/app#/serverapi2/qf2nxq

流水线配置

在工程中添加Jenkinsfile文件。内容如下:

pipeline {
    agent any
    stages {
        stage("stage 1: Test dingding notify") {
            steps {
                echo 'Test dingding notify'
                script {
                    env.commit = "${sh(script:'git log --oneline --no-merges|head -1', returnStdout: true)}"
                }
            }
            
        }
    }
    post {
        always {
            echo 'This will always run'
            wrap([$class: 'BuildUser']) {
                sh 'echo "${BUILD_USER}"'
                sh """curl 'https://oapi.dingtalk.com/robot/send?access_token=3dfb***9ece'  -H 'Content-Type: application/json' -d '{"msgtype":"text","text":{"content": "Jenkins提醒。部署服务:${JOB_NAME} \n构建分支: ${BRANCH_NAME}\n构建ID: ${BUILD_ID}\n提交信息:${commit}构建状态:${currentBuild.currentResult}"}}'"""
            }
        }
        success {
            echo 'successful'
        }
        failure {
            echo 'failed'
        }
    }
}

将推送消息放到always里,任何构建都会推送消息。

warp包装器圈定BuildUser使用范围。本例安全机制是使用关键字的方式,Jenkins作为关键字才能推送成功。

currentBuild.currentResult可以打印出结果,详情可参考https://issues.jenkins.io/browse/JENKINS-56402

注意:文件中的中文可能会乱码,注意添加转码配置。

钉钉消息格式

消息格式参考管网接口参数说明,可以配置纯文本、markdown、连接等。结合审计流程制造卡点审批等效果

https://developers.dingtalk.com/document/robots/message-types-and-data-format
text
sh """curl 'https://oapi.dingtalk.com/robot/send?access_token=3dfb***9ece'  -H 'Content-Type: application/json' -d '{"at":{"atMobiles":[153****]},"msgtype":"text","text":{"content": "Jenkins Pipeline. \n:${JOB_NAME} \nBuild branch: ${BRANCH_NAME}\nBuild ID: ${BUILD_ID}\nCommit message:${commit}\nBuild state:${currentBuild.currentResult}"}}'"""
markdown
sh """curl 'https://oapi.dingtalk.com/robot/send?access_token=3dfb***9ece'  -H 'Content-Type: application/json' -d '{"at":{"atMobiles":[153****]},"msgtype":"markdown","markdown":{"title":"Jenkins 构建提醒", "text":"## Jenkins Message \n![](http://47.119.xx.xx/src/assets//img/girls/11.jpg) \n **Build ID**: ${BUILD_ID} \n**Commit message**: ${commit}\n**Build state**: ${currentBuild.currentResult}"}}'"""
actionCard
"""curl 'https://oapi.dingtalk.com/robot/send?access_token=3dfb***9ece'  -H 'Content-Type: application/json' -d '{"at":{"atMobiles":[153***]}, "msgtype":"actionCard","actionCard":{"title":"Jenkins Pipeline.", "text":"## Jenkins Message<br/>![](http://47.119.XX.XX/src/assets//img/girls/15.jpg)<br/>**Build ID**: ${BUILD_ID}<br/>**Commit message**: ${commit}<br/>**Build state**: ${currentBuild.currentResult}<br/>@153","btns":[{"title":"Yes","actionURL":"#"},{"title":"No","actionURL":"#"}]}}'"""

附录

问题1:No such property: BUILD_USER for class: groovy.lang.Binding

安装后还要去全局配置中勾选

问题2:{"errcode":310000,"errmsg":"sign not match, more: [https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq]"}

调用webhook接口报错,原因是自定义机器人安全机制定义了“加签”,要验证方式。有三种验证方式,具提参考钉钉官方说明文档。https://developers.dingtalk.com/document/robots/customize-robot-security-settings

问题3:中文乱码

//TODO

posted @ 2021-12-28 17:51  乐小天  阅读(1216)  评论(0编辑  收藏  举报