Foreword

GitLab联动Jenkins完成CI\CD流程

webhooks方式

Jenkins

Jenkins升级

Jenkins自动升级,完成以后Jenkins就无法启动了,查log可以看到提示说明java版本太老了

Jenkins升级后不再支持java11的,需要安装java17或者21,我这里直接选择21

进入Jenkins目录下,修改jenkins.xml文件,将其中的jdk修改为新安装的jdk,然后重启一点电脑,重启jenkins服务即可

GitLab插件

首先Jenkins需要安装GitLab插件,否则收不到GitLab的请求

然后在Credentials中添加GitLab的账号

用户名和密码的形式即可

  • 这个操作只要做一次即可

GitLab API token

还有一种方式创建GitLab API token,这种是有使用年限的

系统设置中的GitLab,然后添加Credentials,选择GitLab API token

这个token可以从GitLab用户设置中创建

  • 注意token有效期只有1年

然后把token复制到jenkins那边,通过右侧的Test Connection就能测试出来token是否可以使用

正常的话就显示Success

这种方式创建的token,在配置CI的时候,可以不选择credentials,Jenkins会自动帮你匹配对应的GitLab库的token

测试配置

创建一个空配置,前面的GitLab相关选项都不选择,直接选Git 仓库中填入对应地址,选择刚才创建的GitLab账号

分支选好

选择当推送时进行build,记录下旁边写的webhook的url,有些时候端口可以不要(如果端口是对外使用的),展开下面的高级选项

点击生成token,记录下这个token值,剩下执行脚本或者命令部分就正常填写,没有大差别了,弄好以后保存

GitLab

回到GitLab,由于是内网机器,所以需要开启内网连接的请求

管理员权限,进入设置-网络管理

出站请求中允许本地网络,必要的话可以把本地的域名或者是ip直接给进去,防止被拦截

  • 这个操作只需要做一次即可

回到工程中,设置-Webhooks,新建一个,URL使用刚才记录的URL,Secret令牌使用刚才的token,保存

测试,点击推送事件

可以看到正常返回200

Jenkins侧也有正确的响应

到这里整个webhook的触发方式就可以正常使用了

集成方式

按道理说GitLab和Jenkins还有另外一个集成的地方,但是前面几次测试都提示缺少Token,导致并不能触发。

按理来说集成方式应该是最简单的,这里重新参考了官方的配置指南,并且重试了一遍流程以后发现可以走通

Webhook中的GitLab API token的配置操作需要提前做完,然后才能接着操作

Jenkins中新建一个配置,这次选择GitLab连接和仓库名称,千问不要写错了

下面的配置里勾上tag和merge触发,其实不勾也行。

注意高级中,一定要确保下面的secret token是空白的,如果不是使用clear清空他

最后构建选择Publish build status to GitLab,就可以把状态返回回来了

回到GitLab的仓库中,在集成-Jenkins中启用集成,并且输入Jenkins的URL,然后输入Jenkins的配置名称

  • 注意是Jenkins的配置名称,不是项目名称

接着输入Jenkins的账号和密码,保存,测试设置,就能看到正常工作了

Summary

还得是官方文档,全网大部分都是一通乱操作,最后都走到了webhooks的方式中去了,而集成是最简单的

Quote

https://blog.csdn.net/weixin_63294004/article/details/143671722

https://blog.csdn.net/weixin_43546282/article/details/129130533

https://www.cnblogs.com/ygbh/p/17483811.html#_label3_1_3_2

https://docs.GitLab.com/ee/integration/jenkins.html#grant-jenkins-access-to-the-GitLab-project