Jenkins 实现Gitlab事件自动触发Jenkins构建及钉钉消息推送
实现Gitlab事件自动触发Jenkins构建及钉钉消息推送
实践环境
GitLab Community Edition 12.6.4
Jenkins 2.284
Post build task 1.9(Jenkins插件)
Generic Webhook Trigger Plugin 1.72(Jenkins插件)
GitLab 1.5.13(Jenkins插件)
实现步骤
钉钉机器人配置
选择要推送的钉钉群 -> 点击群设置按钮 -> 点击智能群助手 -> 点击添加机器人 -> 点击添加机器人+号按钮 -> 点击自定义->填写机器人名字,用于匹配推送消息请求体内容的的关键词

然后,复制出Webhook地址,供下文钉钉消息推送Shell脚本中使用,完成

安装Jenkins插件
新建并配置Jenkins项目
Build Triggers配置
如下,勾选Generic Webhook Trigger

Post content parameters(因为Gitlab触发的请求为post请求,需要基于请求体内容来判断是否执行Jenkins构建)关键配置项说明:
Variable 自定义变量名称
Expression 用于提取变量值的表达式(支持JSONPath、XPath),提取的值赋值给上述自定义变量(例中为event_name)。
Option Filter关键配置项说明:
Expression 用于匹配下述Text的正则表达式,如果匹配则执行构建请求,否则不执行。这里配置为^push$,是因为Gitlab merge合并代码操作触发的请求,其请求体为json格式数据,其中包含名为event_name的键,其值为 push
Text 用于匹配上述正则表达式的文本,例中设置为自定义变量$event_name。
以上配置大意为,如果收到构建请求,使用JSONPath表达式从JSON格式的请求体获取键为event_name的值,存储到名为event_name变量,然后取该变量值同正则表达式^push$匹配,如果匹配,则触发Jenkins构建当前项目,否则不构建。
Token:自定义token值,用于请求http://JENKINS_URL/generic-webhook-trigger/invoke触发构建使用,如下,可以用于查询参数、请求头参数
/invoke?token=TOKEN_HERE
token: TOKEN_HERE
Authorization: Bearer TOKEN_HERE
generic-webhook-trigger配置参考连接
https://plugins.jenkins.io/generic-webhook-trigger/
Post-build Actions配置
点击Add post-build action按钮,弹出界面中选择Post build task可新增以下配置界面。如下,可在Script输入框中编写构建完成后需要执行的Shell命令(该插件会先根据填写的shell命令生成一个临时sh脚本,然后执行该脚本),例中为钉钉推送命令,具体代码参见下文

如上图,如果只希望构建成功才执行Script,可以勾选Run script only if all previous steps were successful
钉钉消息推送Shell
#!/bin/bash
#################################################################
# 作者:shouke
# 日期:2021-03-07
# 作用:机器人通知
#################################################################
# 钉钉消息变量定义
#################################################################
# 当前时间
TIME_NOW=`date "+%Y年%m月%d日 %H:%M:%S"`
BUILD_STATUS="失败"
LAST_BUILD_BUILD_XML=`curl http://ops.dev.xxxx.com/view/testarch/job/$JOB_NAME/lastBuild/api/xml --user juser_name:123456`
BUILD_RESULT=$(echo $LAST_BUILD_BUILD_XML | grep "<result>SUCCESS</result>")
if [ "${BUILD_RESULT}" ];then
BUILD_STATUS="成功"
else
BUILD_RESULT=$(echo $LAST_BUILD_BUILD_XML | grep "<result>FAILURE</result>")
if [ "${BUILD_RESULT}" ];then
BUILD_STATUS="失败"
else
BUILD_STATUS="无法获取"
fi
fi
# 机器人 webhook 地址(上文添加钉钉机器人结束时复制的webhook地址)
DINGTALK_WEBHOOK_URL='https://oapi.dingtalk.com/robot/send?access_token=903fcd6c56f301d0a57bee243792a11bb1e42cae89af5a9071bdba890c0a3d2'
# 消息标题 # 实际不起作用,但是不能少,否则发送失败
DINGTALK_TITLE="XX平台有新的构建,请及时查阅"
# 消息正文
# Jenkins Job构建日志地址
JENKINS_JOB_BUILD_LOG_URL="http://ops.dev.xxxx.com/view/testarch/job/${JOB_NAME}/${BUILD_NUMBER}/console"
DINGTALK_TEXT="## xx平台有新的构建,请及时查阅\n\n>\
**【通知时间】**:${TIME_NOW}\n\n>\
**【构建ID】**:${BUILD_DISPLAY_NAME}\n\n>\
**【构建项目】**:${JOB_NAME}\n\n>\
**【构建状态】**:${BUILD_STATUS}\n\n>\
**[点击查看更多](${JENKINS_JOB_BUILD_LOG_URL})**\n
"
#
# 发送钉钉消息通知函数
#################################################################
function SEND_MESSAGE_TO_DINGTALK() {
/usr/bin/curl "$1" -H 'Content-Type: application/json' -d "
{
\"markdown\": {
\"title\": \"$2\",
\"text\": \"$3\"
},
\"at\": {
\"atMobiles\": [],
\"isAtAll\": false
},
\"msgtype\": \"markdown\"
}
"
}
# 发送钉钉消息
#################################################################
SEND_MESSAGE_TO_DINGTALK "${DINGTALK_WEBHOOK_URL}" "${DINGTALK_TITLE}" "${DINGTALK_TEXT}"
说明:
curl http://ops.dev.xxxx.com/view/testarch/job/$JOB_NAME/lastBuild/api/xml --user juser_name:123456`
以名为juser_name的用户,使用密码123456访问指定项目的最后一次构建相关的信息,返回xml文档
注意:钉钉聊天窗口中要实现消息换行必须使用两个\n
Gitlab自动触发配置
Settings -> Integration,打开如下页面,
1)填写URL(http://ops.dev.xxxx.com/generic-webhook-trigger/invoke?token=0771826b93bbd566266bce34f5123ebb),这里的token值即为generic-webhook-trigger插件中配置在定义token值
2)勾选Push events触发器(这里以push、合并代码操作为例子,所以仅勾选该事件)
3)勾选 Enable SSL verification 复选框(如果没有勾选的话,默认就是勾选的)
最后点击 Add webhook按钮

添加的配置,会自动显示在下方,可以对其进行事件触发测试

触发的记录会自动在配置编辑页面下方显示,点击 View details按钮,可以查看请求明细

注意:自动触发时Jenkins项目构建时,如果Jenkins使用了参数化构建插件Build With Parameters Plugin,并且使用插件实现的参数有设置默认值,则自动触发时也会自动使用对应参数的默认值进行构建。
钉钉消息推送效果图

Jenkins 实现Gitlab事件自动触发Jenkins构建及钉钉消息推送的更多相关文章
- 配置GitLab Push 自动触发Jenkins构建
配置GitLab Push 自动触发Jenkins构建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客是对之前的笔记:https://www.cnblogs.com/yin ...
- 配置Gitlab Push自动触发jenkins构建
一. 下载gitlab plugin Jenkins>插件管理 下载并安装gitlab plugin 二. 配置gitlab认证 路径Jenkins>Credentials>Syst ...
- 持续集成学习11 jenkins和gitlab集成自动触发
一.配置gitlab上提交代码后在jenkins上自动构建 1.在jenkins上配置gitlab 系统管理--->系统设置--->gitlab配置 2.在gitlab上配置token 3 ...
- GitLab 自动触发 Jenkins 构建
GitLab 是当前应用非常广泛的 Git Hosting 工具,Jenkins 是非常牛逼的持续集成工具.尽管 GitLab 有内建的 GitLab CI,但它远没有 Jenkins 那么强大好用. ...
- 如何创建一个项目,让gitlab自动触发jenkins进行构建
前进是:你已经配置好jenkins+gitlab自动化布置了,这里只是常规构建新的项目时,需要做的配置,记录下来,以免忘了又着急 参考这篇博客: https://www.jianshu.com/p/e ...
- Gitlab自动触发Jenkins构建打包
一.目的 在部门的测试环境中,开发人员一旦向gitlab仓库提交成功代码,gitlab就会自动触发jenkins构建项目.当然在构建后还可以添加项目部署或者自动化测试的脚本.这里只针对测试环境. 二. ...
- Gitlab自动触发Jenkins构建项目
Gitlab自动触发Jenkins构建项目 一.前提 Gitlab已安装配置好. Jenkins已安装Gitlab plugin. 二.配置jenkins中Job 1.勾选触发器下的gitlab触发器 ...
- Git提交代码自动触发JenKins构建项目
1.需求场景 用户提交代码后自动触发jenkins构建项目 流程图如下: 2.JenKins安装Gitlab Hook Plugin插件 3.JenKins配置 4.Gitlab Hook Plugi ...
- gitlib配置push后自动触发jenkins构建sonar扫描
jenkins所用到的插件: Gitlab Hook Plugin 配置步骤 1.先进入gitlab的个人设置,生成api token 2.复制生成的访问令牌,打开jenkins的凭据,添加选择类型是 ...
随机推荐
- Object to Array
Object to Array objectToArray(obj = {}, title = `标题`){ let datas = []; if(Object.keys(obj).length) { ...
- 同步vscode的setting.json和extensions
vc 详情 $ npm i -g vscode-config $ vc config --token <your github token> $ vc config --id <yo ...
- “NGK公链+5G”——打造智慧城市
智慧城市目前被全球各国当成城市建设的重点,旨在城市在智能化的同时,还能给民众带来幸福感和安全感.随着5G的到来,城市智能化又到了一个新的高度.比如无人驾驶.无人机等方面将会产生质的变化,因为5G的加入 ...
- ElasticSearch URI 查询
公号:码农充电站pro 主页:https://codeshellme.github.io 1,URI 查询格式 URI 查询的一般格式如下: GET /index_name/_search?q=key ...
- 线段树&数链剖分
傻逼线段树,傻逼数剖 线段树 定义: 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 使用线段树可以快速的查找某一个节点在若干条线段中出现 ...
- ============================================ 微信小程序开发学习
开发文档: https://developers.weixin.qq.com/miniprogram/dev/framework/
- Excel小技巧之VLOOKUP()使用简单说明
前两天人事的小姐姐需要处理一个表格,需要在一张新表中的匹配旧表的数据,由于数据量较大不知如何处理. 我告诉她使用VLOOKUP()函数,然后她不知道怎么使用.其实我也不大用,因为数据库用的多很少使用表 ...
- svn报错Previous operation has not finished; run 'cleanup' if it was interrupted
- 力扣208. 实现 Trie (前缀树)
原题 以下是我的代码,就是简单的字符串操作,可以ac但背离了题意,我之前没接触过Trie 1 class Trie: 2 3 def __init__(self): 4 ""&qu ...
- (三)String、StringBuilder、StringBuffer在字符串操作中的性能差异浅析
参考资料:https://www.iteye.com/blog/hank4ever-581463 <Core Java Volume I-Fundamentals>原书第十版 <Ja ...