实现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 用于提取变量值的表达式(支持JSONPathXPath),提取的值赋值给上述自定义变量(例中为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构建及钉钉消息推送的更多相关文章

  1. 配置GitLab Push 自动触发Jenkins构建

    配置GitLab Push 自动触发Jenkins构建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客是对之前的笔记:https://www.cnblogs.com/yin ...

  2. 配置Gitlab Push自动触发jenkins构建

    一. 下载gitlab plugin Jenkins>插件管理 下载并安装gitlab plugin 二. 配置gitlab认证 路径Jenkins>Credentials>Syst ...

  3. 持续集成学习11 jenkins和gitlab集成自动触发

    一.配置gitlab上提交代码后在jenkins上自动构建 1.在jenkins上配置gitlab 系统管理--->系统设置--->gitlab配置 2.在gitlab上配置token 3 ...

  4. GitLab 自动触发 Jenkins 构建

    GitLab 是当前应用非常广泛的 Git Hosting 工具,Jenkins 是非常牛逼的持续集成工具.尽管 GitLab 有内建的 GitLab CI,但它远没有 Jenkins 那么强大好用. ...

  5. 如何创建一个项目,让gitlab自动触发jenkins进行构建

    前进是:你已经配置好jenkins+gitlab自动化布置了,这里只是常规构建新的项目时,需要做的配置,记录下来,以免忘了又着急 参考这篇博客: https://www.jianshu.com/p/e ...

  6. Gitlab自动触发Jenkins构建打包

    一.目的 在部门的测试环境中,开发人员一旦向gitlab仓库提交成功代码,gitlab就会自动触发jenkins构建项目.当然在构建后还可以添加项目部署或者自动化测试的脚本.这里只针对测试环境. 二. ...

  7. Gitlab自动触发Jenkins构建项目

    Gitlab自动触发Jenkins构建项目 一.前提 Gitlab已安装配置好. Jenkins已安装Gitlab plugin. 二.配置jenkins中Job 1.勾选触发器下的gitlab触发器 ...

  8. Git提交代码自动触发JenKins构建项目

    1.需求场景 用户提交代码后自动触发jenkins构建项目 流程图如下: 2.JenKins安装Gitlab Hook Plugin插件 3.JenKins配置 4.Gitlab Hook Plugi ...

  9. gitlib配置push后自动触发jenkins构建sonar扫描

    jenkins所用到的插件: Gitlab Hook Plugin 配置步骤 1.先进入gitlab的个人设置,生成api token 2.复制生成的访问令牌,打开jenkins的凭据,添加选择类型是 ...

随机推荐

  1. uniapp 自定义弹窗组件

    先上效果: 组件源码:slot-modal.vue <template> <view class="modal-container" v-if="sho ...

  2. 让 gRPC 提供 REST 服务

    让 gRPC 提供 REST 服务 Intro gRPC 是一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计. gRPC 基于 HTTP/2 标准设计,带来诸如双向流.流控.头部 ...

  3. [转]c++使用thread类时编译出错,对‘pthread_create’未定义的引用

    转载地址:https://blog.csdn.net/wuhui20091515/article/details/52531202 例子1 #include <iostream> #inc ...

  4. 【转】奇异值分解(SVD)原理详解及推导

    原文地址:https://blog.csdn.net/zhongkejingwang/article/details/43053513,转载主要方便随时查阅,如有版权要求,请及时联系. 在网上看到有很 ...

  5. mysql一张表到底能存多少数据?

    前言 程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨 知识准备 数据页 在操作系统中,我们知道为了跟磁盘交互, ...

  6. 1079 Total Sales of Supply Chain ——PAT甲级真题

    1079 Total Sales of Supply Chain A supply chain is a network of retailers(零售商), distributors(经销商), a ...

  7. Virtual DOM 简直就是挥霍

    彻底澄清"Virtual DOM 飞快"的神话. 注意:原文发表于2018-12-27,随着框架不断演进,部分内容可能已不适用. 近年来,如果你有使用过 JavaScript 框架 ...

  8. Linux系统编程【4】——文件系统

    pwd命令的作用 Linux的文件系统比较庞大,所以笔者从pwd这一命令入手,在实现的过程中加深对文件系统的了解. 输入:man pwd 从指导文档中可以看到,pwd命令的作用是显示出当前所处位置,以 ...

  9. Aliyun Oss 上传文件

    目录 Aliyun OSS OSS 简介 OSS 基本概念 OSS 功能概述 OSS 使用 创建存储空间Bucket 创建子目录 Java编码 测试 Aliyun OSS OSS 简介 阿里云对象存储 ...

  10. 看完我的笔记不懂也会懂----bootstrap

    目录 Bootstrap笔记 知识点扫盲 容器 栅格系统 源码分析部分 外部容器 栅格系统(盒模型)设计的精妙之处 Bootstrap笔记 写在开始: 由于我对AngulaJS的学习只是一个最浅显的过 ...