持续部署之gitlab提交代码触发自动构建 Jenkins 任务

  • ​​一、准备Jenkins环境​​
  • ​​二、安装gitlab插件​​
  • ​​三、新建构建任务​​
  • ​​1. 新建maven构建任务​​
  • ​​2. 源码管理​​
  • ​​3. 配置触发器​​
  • ​​4. 设置构建过程​​
  • ​​5. 设置构建之后的操作​​
  • ​​四、gitlab 配置触发器 webhooks​​

一、准备Jenkins环境

首先要有一个正常可用的Jenkins,这里不再赘述Jenkins环境的搭建,默认已有Jenkins环境。

docker 部署 Jenkins 可参考之前的文章:​​使用Docker安装Jenkins​​

二、安装gitlab插件

持续部署的第一步需要检查是否安装gitlab插件: ​​gitlab hook​​​插件 和 ​​gitlab​​插件

  1. 点击 系统管理(Manage jenkins)–插件管理
  2. 可以看到 我这里已经安装过了,如果没有安装,可以直接在​​可选插件​​标签里面搜gitlab,按照提示安装对应的插件。

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_git

三、新建构建任务

1. 新建maven构建任务

点击左侧菜单栏的​​新建任务​​​,创建第一个任务: ​​Test_Job​

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_jenkins_02

2. 源码管理

这里创建一个自动构建maven项目的任务。源码管理这里选择的git,配置上自己的仓库,如果没有​​Credentials​​令牌,可以点击后面的添加,添加有拉取代码权限的账号。

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_运维_03

3. 配置触发器

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_Jenkins_04


触发器可以灵活配置:

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_Jenkins_05

Allowed branches :
Allow all branches to trigger this job #允许所有分支触发此作业
Filter branches by name #按名称过滤分支
Include :dev #允许触发构建的分支,dev 分支提交会自动构建
Exclude:master #排除触发构建的分支,此时 master 分支提交不会自动构建
Filter branches by regex #通过正则表达式过滤分支
Source Branch Regex: #源分支正则表达式
Target Branch Regex:.*dev #目标分支正则表达式,允许触发构建的 dev 分支
Filter merge request by label #按标签过滤合并请求
Include: #允许触发构建的标签
Exclude: #排除触发自动构建的标签

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_Jenkins_06


这里可以根据需要设置触发的分支。我这里选择develop, 然后点击​​Generate​​ 生成 token。

4. 设置构建过程

这里设置构建前执行shell 配置jdk环境变量,这里可以根据需要设置构建前的步骤。

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_Jenkins_07


配置 POM位置和构建的命令:

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_Jenkins_08


我这里的配置maven构建命令是这样,根据自己的项目配置,设置maven构建命令。

5. 设置构建之后的操作

这里使用将打包好的文件:​​cavd-web-server-2.0.tar.gz​​​,上传至部署的服务器:​​192.168.104.103​

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_docker_09


说明:

这里选择了 ​​Run only if build succeeds​​ 表示仅在构建成功后运行此步骤。

  • Source files 构建完成的文件,这里的位置需要对Jenkins来说是可见的,否则找不到该文件,是不行的。
  • ​Remote directory​​ 表示上传至远程文件夹的位置。
  • ​Exec command​​ 是直接在控制台执行的命令。这里是针对Jenkins内部的,不是远程服务器。

保存后,去gitlab上配置触发器。

四、gitlab 配置触发器 webhooks

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_docker_10


持续部署之gitlab提交代码触发自动构建 Jenkins 任务_jenkins_11


点击下面的 ​​Add webhook​​ 新增。Project Hooks表示添加成功。

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_jenkins_12


然后点击Test、这里我选择Push events进行测试验证一下,可以看到页面会自动发起触发器请求,正常会显示:​​Hook executed successfully: HTTP 200​​ 状态码是200 表示请求成功。

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_docker_13


由于我这里gitLab到Jenkins的网络暂时是不通的,导致点击测试后,提示:​​Hook execution failed: execution expired​

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_运维_14


这里提示:​​Hook execution failed: execution expired​​,点击 Edit 可以进去看到具体的webhook日志

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_jenkins_15


其中:​​Request details​​可以看到具体的请求内容。

这里可以使用postman 工具测试下,看下请求的响应是什么。是否是网络不通的原因,还是Jenkins配置的原因。

可以看到 使用postman请求,响应码是200,但是没有触发构建任务。

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_jenkins_16


然后查了下,这个触发的URL 貌似应该这样写:​​http://<jenkisn的IP地址和端口>/gitlab/build_now/<jenkins的job名称>​​​ 例如jenkins的IP地址为​​192.168.104.51:9999​​,job名称是​​Test_Job​​,那么该URL为​​http://192.168.104.51:9999/gitlab/build_now/Test_Job​

所以我直接将ip地址改为jenkins的ip地址,重新获取token,再次点击测试 出现http 200,表示成功

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_运维_17

看了下Jenkins 也正常开始构建了。

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_运维_18


然后可以看到,控制台输出为:push触发。

持续部署之gitlab提交代码触发自动构建 Jenkins 任务_运维_19


至此,一个最简单的gitlab触发Jenkins任务构建,就完成了。这里触发之后的构建内容可以根据自己的需要在Jenkins上面灵活配置。