GitLab 钩子 + Jenkins 自动化构建项目

Jenkins + Maven + Git 自动化部署的基础上,我们今天通过 GitLab 钩子 的方式,当开发提交代码,或者合并分支请求的时候,自动地触发自动化构建。

一、Jenkins 配置

1、远程构建触发器

在 Jenkins 构建配置 Dashboard > first > Configuration > Triggers 有一个构建触发器

它可以让远程的服务器,或者客户端通过 HTTP 请求的方式,来触发某一个构建任务的构建。

2、测试远程构建触发器

  • 配置上 token,然后保存
  • 在打开 Jenkins 的同一个浏览器,访问
bash 复制代码
http://192.168.40.98:8080/job/first/build?token=123456
  • 可以看到 Jenkins 的构建列表里,触发了一个新的构建任务。

3、跨浏览器测试

打开另外一个浏览器,就比如我 Jenkins 是在 Edge 打开的,我现在在 夸克 浏览器访问刚才的URL。

会发现被重定向到登录页了。这是因为跨浏览器访问,夸克浏览器没有 Jenkins 的登录会话(session),请求被拦截并重定向到登录页了。那怎么解决这个问题呢?

4、安装 Build Authorization Token Root 插件

在 Dashboard > Manage Jenkins > 插件管理 > Available plugins 搜索 Build Authorization Token Root 插件 并安装

  • 安装完点击返回首页

可以让我们以匿名的访问来访问 Jenkins,并通过访问另外一个 URL 来触发 Jenkins 的构建任务。

5、测试匿名触发

在夸克浏览器访问

bash 复制代码
http://192.168.40.98:8080/buildByToken/build?job=first&token=123456

此时,Edge 的 Jenkins 自动触发了一次新的构建

接下来,我们就可以把这个地址配置到 GitLab Webhook 上,当 GitLab 发生 提交、合并 事件的时候,去回调这个 URL。

二、GitLab 配置

1、GitLab 项目配置

在 GitLab 项目配置里,找到 Settings > Webhooks

  • 配置 Jenkins URL
  • 勾选 Push 事件,默认所有分支
  • 取消 SSL 认证

因为我们 Jenkins URL 并不是 HTTPS 的,所以取消认证,Add webhook

  • 点击完 Add webhook 会报一个错,Invalid url given

这是因为 GitLab 做了一个限制,不允许本地网络访问。

2、GitLab 全局配置

在 Admin area > Settings > Network > Outbound requests(出站请求)勾选

Allow requests to the local network from webhooks and integrations

然后 Save changes。

3、测试 GitLab Hook

重新再配置一遍 GitLab 项目配置后,会发现 Webhooks 多出来一条记录。

点击 Test,选择 Push events 进行测试。

在点击 Push events 的同时,Jenkins 构建列表中,又触发了一次新的构建。证明我们 Webhooks 配置没问题。

4、本地提交代码测试

在 IDEA 修改一下 Jenkins-study 代码并提交

  • 可以看到,Jenkins 又触发了一次新的构建
  • 浏览器访问
bash 复制代码
http://192.168.40.97:8088/

思考?

  • Push events 触发的的构建有什么问题吗?

首先的问题就是构建太频繁了,开发每提交一次代码,都会触发一次新的构建,这样是很耗费系统资源的。正常我们项目针对每个环境都会有一个分支,比如 开发环境 有一个 dev 分支,测试环境有一个 test 分支,生产环境有一个 prod 分支。

当开发人员将 dev 分支合并到 test 分支的时候,或者 部署人员 将 test 分支合并到 prod 分支的时候,我们才希望 Jenkins 帮我们触发构建。

5、Merge 事件触发

  • 修改 Webhooks 配置
  • 新建分支

我们现在 Jenkins 拉取的分支是 master,我们从 master 拉取一个新的分支 test,修改一下代码,然后合并回 master,看看会发生什么。

  • GitLab 上处理合并请求
  • 选择将 test 合并到 master
  • 创建合并请求
  • 可以看到此时我们的代码还未合并,只是创建了合并请求,Jenkins 就触发了一次构建

原因写在 GitLab Webhook 说明里

  • 合并代码
  • Jenkins 又触发了两次构建

一次是我本地 test 合并到 远程 GitLab test,触发一次;

一次是远程 test 合并到 远程 master 触发一次;

  • 查看浏览器,代码已是最新

三、总结

通过实际测试,GitLab 的 合并请求事件,是不管 哪个分支合并到哪个分支,它都会触发通知,需要由你的服务端来决定是否需要处理。这样就会造成即使不是我们当前 Jenkins 构建任务分支的合并,也会触发 Jenkins 的构建。

相关推荐
懂软件的胡子个哥19 分钟前
微信二次开发如何接入 AI,真正可用的不是简单自动回复
运维·微信·wechatapi·个人微信号二次开发·微信群管理
海宇数据1 小时前
零信任架构实战:基于海宇公安二要素认证即时版构建自动化对公账户准入网关
运维·人工智能·架构·自动化
蓝胖的四次元口袋1 小时前
MySQL主从复制与Redis哨兵高可用集群实战
运维·主从复制·哨兵模式
蓝速科技2 小时前
国产化信创终端等保合规核心防护与落地方案丨蓝速科技
大数据·运维·数据库·人工智能·科技
pt10433 小时前
Cisco Splunk for AI Operations:AIOps企业实践
运维·人工智能·自动化
江屿风3 小时前
【Linux系统】【Linux进程终止等待详解与程序替换机制初体验】流食般投喂
linux·运维·笔记·系统架构·centos·unix
2601_949499944 小时前
工业 POF 器件国产化新思路:芯瑞科技DT‑2532Z 解决安华高 HFBR‑2532Z 供应链卡点
运维·网络·人工智能·科技·光模块
fanxiaohui121384 小时前
2026符合上飞机标准的充电宝推荐南孚传应,质量稳定又安全
运维·服务器·人工智能·科技
国际云,接待4 小时前
云服务器跨厂商迁移怎么尽量不停机:用 rsync、MySQL binlog 和 DNS TTL 做双阶段切换
运维·服务器·mysql