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的凭据,添加选择类型是 ...
随机推荐
- vue2.0用法以及环境配置
一.配置环境搭建 1.安装node.js (可以去官网看) 2.安装git (推荐看廖雪峰文章,点击查看) 3.安装vue: cmd:npm install vue //最新稳定版本 npm inst ...
- 星空值、SPC、算力组成三元永动机制!VAST带你把握时代!
目前中心化金融体系为用户提供的服务在便捷性和易用性方面已经达到了新高度,但随着时代发展,大众对于金融安全性和可控性的需求进一步提升,需要去中心化金融服务商来提供更具创意的解决方案.盛大公链为此在应用层 ...
- 「NGK每日快讯」2021.1.5日NGK第63期官方快讯!
- rabbitMQ高可用方案
普通模式 默认的集群模式,以两个节点(rabbit01.rabbit02)为例来进行说明.对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和r ...
- Error running 'tomcat': Unknown error
免费分享95套java实战项目,不仅有源码还有对应的开发视频,关注公众号『勾玉技术』回复"95"即可获取 无意中发现了一位清华大佬的算法笔记,需要的加公众号 勾玉技术 回复 清华算 ...
- pwn篇:攻防世界进阶welpwn,LibcSearcher使用
攻防世界welpwn (搬运一篇自己在CSDN写的帖子) 链接:https://blog.csdn.net/weixin_44644249/article/details/113781356 这题主要 ...
- ctf.show_web13(文件上传之.user.ini)
这是一道文件上传题,先二话不说丢个图片码,显示为 先考虑文件太小,用burp抓包,添加了一堆无用的东西后显示仍然是error file zise,直到上传正常图片依旧如此,考虑文件太大.将一句话木马修 ...
- Go | Go 结合 Consul 实现动态反向代理
Go 结合 Consul 实现动态反向代理 代理的核心功能可以用一句话概括:接受客户端的请求,转发到后端服务器,获得应答之后返回给客户端. Table of Contents 反向代理 实现逻辑 Go ...
- SpringBoot(七):SpringBoot中如何使用过滤器(Filter)?
方式一: 通过注解方式实现: 1.编写一个Servlet3的注解过滤器(和上一章Servlet相似) 贴代码: package com.example.springbootweb.filter; im ...
- 如何掌握 C 语言的一大利器——指针?
一览:初学 C 语言时,大家肯定都被指针这个概念折磨过,一会指向这里.一会指向那里,最后把自己给指晕了.本文从一些基本的概念开始介绍指针的基本使用. 内存 考虑到初学 C 语言时,大家可能对计算机的组 ...