CICD | Jenkins & Gitlab集成:WebHook触发构建

在上一篇博客中,我们学习了Jenkins的搭建和插件+流水线的基本使用方法,Jenkins极大地提升了部署效率。
最近想学习一下如何集成GitLab webhook,实现进一步解放双手,目标:

推送(git push)触发构建

推送到指定分支触发构建

根据commit的文件,结合mvn -pl 指令,实现部分增量构建,并记录commit信息

推送事件也可以换成Tag push events、Merge request events等其他触发条件,根据需要自由选择。

基础实现

使用Gitlab Hook Plugin,并在Jenkins和GitLab中分别配置。

下载并配置插件

下载安装Gitlab Hook Plugin

在Jenkins Job中配置

在GitLab中配置

在Gitlab中配置

在Jenkins配置中配置允许访问

配置完毕后,点击测试

出现如图所示提醒,配置成功!

至此,目标中的前两条,推送构建和推送到指定分支构建实现!

进阶实现

从上述过程,我们也可以看出,WebHook的本质就是从GitLab发了一条请求,Jenkins配置了一个终端地址(endpoint)来接收,从而实现了两个步骤的串联。
这个请求实质上就是一条HTTP POST请求。
相信接触过服务互相调用的小伙伴们都不陌生。有了请求体,我们自然可以拿到自己想要的东西,进行进一步的处理了。

请求体内容

Jenkins插件:Generic WebHook Trigger Pugin

下载并配置Generic WebHook Trigger Pugin


从插件简介来看,支持接收任何一个HTTP请求,当然也包括接收GitLab发送的请求。

在Jenkins Job中配置接收地址

构建触发器配置

配置鉴权token

在Jenkins用户管理中配置鉴权token

我直接使用admin帐号创建,在发送请求时需要携带此token。

GitLab配置

在Gitlab中的配置与上文相同,格式为:
:${token}@${JENKINS_IP}:${PORT}/generic-webhook-trigger/invoke
填上刚刚配置生成的token和自己的Jenkins地址和端口即可。
同样可以使用自带的测试来测试连接,返回200成功。

如果返回404,看配置的地址是否有误

返回403,查看权限配置是否有误
至此,连接建立成功!

编写流水线脚本

关于如何使用声明式流水线,上一次的博客已有所介绍。这里主要说明如何加入触发器语法。

流水线触发器语法

从JSONPath中获取参数


要从请求体中拿到所需要的参数,可以通过配置获取JSONPath参数实现。

在流水线中加入下列语句,即可当作变量在流水线脚本中使用。

triggers { GenericTrigger( genericVariables: [ [key: 'branch', value: '$.ref'], [key:'commitText', value:'$.commits'] ], causeString: 'Triggered on $branch' , printContributedVariables: false, printPostContent: false ) }

序列化JSON
要想在pipeline脚本中将字符串反序列化成JSON对象,可以引入 Pipeline Utility Step插件,该插件提供了一些工具方法。

Pipeline Utility Step

def commits = readJSON text: commitText

流水线脚本使用Groovy语言,该语言基于Java编写,也集成了一些有趣的特性。在IDEA中编写只需要配置Groovy Library即可。

核心方法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxfjf.html