Jenkins-实现钉钉报警(pipline)
一.前言
最近打算在项目发版的时候,Jenkins实现钉钉告警,本文用的pipeline结合钉钉实现发版告警。
效果图:
发版成功通知,内容包括版本更新记录。
发版失败通知
二.配置步骤
1.钉钉配置
需要在钉钉电脑端操作
建群-配置机器人-取得讨论组token
记录下wehhook地址,后面用得上。
2.Jenkins配置
1.1 安装jenkins插件
搜索dingding
1.2 添加机器人
进入系统配置
添加机器人
记录机器人ID,后面用得上
3.pipeline配置
此pipeline包含两个点重要内容
1)获取项目发版变更记录
下面pipeline脚本可供参考
#!groovy pipeline{ agent any parameters { string defaultValue: 'master', name: 'branch_name' } environment{ REPOSITORY="git@gitlab.xxxxx.com:java/customer-support.git" COUNTRY="idn" SCRIPT_PATH="/data/script" PROJECT="customer-support" IMAGE="registry-intl.ap-southeast-1.aliyuncs.com/zf/customer-support" } stages { stage("获取代码") { steps { echo "start fetch code from git:${REPOSITORY}" deleteDir() checkout([$class: 'GitSCM', branches: [[name: '*/${branch_name}']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[url: "${REPOSITORY}"]]]) } } stage('输出日志') { steps { script{ //调用方法得到日志 并 输出 def changeString = getChangeString() echo "$changeString" } } } stage('发送钉钉') { steps { dingtalk ( robot: 'zongfan', type: 'MARKDOWN', at:[], atAll: true, title: "${PROJECT}开始上线", text:["### [微笑]开始上线\n\n**项目**: **$PROJECT**\n\n**记录**: \n\n$changeString"], ) } } stage("编译") { steps { echo "start compile" sh "mvn clean package -Dmaven.test.skip=true" } } stage("构建+推送镜像") { steps { echo "start build image" sh "cp -ar start/target/start.jar /data/docker/${ENV}/${PROJECT}/start.jar" sh "${SCRIPT_PATH}/build-images-sit.sh ${ENV} ${IMAGE} ${PROJECT}" } } stage("发布系统") { steps { echo "start deploy" sh "${SCRIPT_PATH}/deploy.sh java-fk ${PROJECT}" } } } post { success { echo "发版成功" dingtalk ( robot: 'zongfan', type: 'MARKDOWN', at:[], atAll: false, title: "${PROJECT}上线成功", text:["### [耶]上线完成\n\n**项目**: **$PROJECT**\n\n**记录**:\n\n$changeString"] ) } failure { echo "上线失败" dingtalk ( robot: 'zongfan', type: 'MARKDOWN', at:["18217477767"], atAll: false, title: "${PROJECT}上线失败", text:["### [捂脸哭]上线失败\n\n**项目**: **$PROJECT**\n\n**记录**:\n\n$changeString"] ) } } } @NonCPS def getChangeString() { MAX_MSG_LEN = 100 def changeString = "" echo "Gathering SCM changes" def changeLogSets = currentBuild.changeSets for (int i = 0; i < changeLogSets.size(); i++) { def entries = changeLogSets[i].items for (int j = 0; j < entries.length; j++) { def entry = entries[j] truncated_msg = entry.msg.take(MAX_MSG_LEN) changeString += "> - ${truncated_msg} [${entry.author}]\n" } } if (!changeString) { changeString = "> - 没有更新记录" } return changeString }
2)钉钉配置说明
1 dingtalk ( 2 #机器人ID 3 robot: 'b9b37ae7-3132-4d9b-9b07-7021ad0e11be', 4 #数据类型 5 type: 'LINK', 6 #钉钉群里需要@的负责人 7 at:["18217472232"], 8 atAll: false, 9 #标题 10 title: "${PROJECK}上线成功!", 11 #报警内容 12 text:["更新记录\n$changeString"], 13 messageUrl: "${WEBURL}", 14 #图片链接地址 15 picUrl:'http://kmzsccfile.kmzssss.com/upload/2020/success.jpg', 16 singleTitle:'', 17 btns: [], 18 hideAvatar: false 19 )
详细说明请参考插件文档
https://jenkinsci.github.io/dingtalk-plugin/guide/pipeline.html