Jenkins构建GitLab合并请求(Merge Request)
本文最后更新于:2023年9月13日 晚上
写了两篇这样的文章,我们大概可以总结出Jenkins构建合并请求(Merge Request)的原理:首先,需要在Jenkins上安装一个插件以便提供一个Webhook接口,配置插件连通对应的代码协作平台以便将构建状态写回代码协作平台(并不是所有的插件都提供这个功能);其次,在对应的Git仓库中设置Webhook监听Git事件,比如合并请求(Merge Request)的创建、编辑等。当有监听的事件发生时,Webhook触发Jenkins的Webhook接口,Webhook接口解析请求数据,创建一些有用的环境变量,比如合并请求(Merge Request)ID,合并请求(Merge Request)的原分支和目标分支等,并触发对应的Jenkins pipeline;最后,创建一个Jenkins pipeline(目前主要是Pipeline2.0的Jenkinsfile),设置被触发的条件和如何克隆对应的代码,以及实际的构建逻辑。接前面的系列,本文将继续介绍如何配置Jenkins和GitLab来构建GitLab合并请求(Merge Request)。
GitLab 官方文档 有写到用Jenkins去构建GitLab中的代码,但是用到了”Jenkins CI”这个项目服务,而这个服务在GitLab免费版本(社区版)中并没有提供,所以不去过多的讨论此方法。下面将利用Jenkins的 Git插件 和 GitLab插件 去实现Jenkins构建GitLab的合并请求(Merge Request)。
配置Jenkins
安装GitLab插件(如果Git插件不存在,会作为GitLab插件的依赖被安装)
-
点击Jenkins -> Manage Jenkins -> Manage Plugins打开Plugin Manager页面
安装完插件后,生成的Web hook url地址为
https://JENKINS_URL/project/YOUR_JOB
。
创建Gitlab Personal Access Token
-
点击Settings打开用户设置页面,并点击Access Tokens打开创建Personal Access Token页面
-
在Name字段填上Token的名字,在Scope字段选上需要的权限,api的权限应该足够了。如果需要设置有效期限,可以设置Expires at字段,否则Token永不过期
-
点击Create personal access token按钮创建Token。注意,需要立即复制这个Token值,否则页面刷新后就会被隐藏掉
配置Jenkins Gitlab插件
创建Jenkins pipeline job用来构建合并请求(Merge Request)
Jenkinsfile
1 |
|
-
变量 事例值 triggerOnPush 任何推送事件都会触发构建。因为是用来构建合并请求(Merge Request),只需要监听合并请求(Merge Request)事件,所以不需要打开。 triggerOnMergeRequest 设置合并请求(Merge Request)事件触发构建,需要打开。 triggerOpenMergeRequestOnPush 当合并请求(Merge Request)的原分支有新的推送触发构建,需要打开。 triggerOnNoteRequest 合并请求(Merge Request)的评论有更新时触发构建,需要打开,并且配合noteRegex设置具体的触发构建的字符串。 ciSkip 当合并请求(Merge Request)的评论包括字符串”[ci-skip]”时,不会构建这个合并请求(Merge Request)。 branchFilterType, includeBranchesSpec, excludeBranchesSpec 设置哪些分支上的合并请求(Merge Request)会触发构建。 -
50行: 添加refspec获取合并请求(merge request)的分支信息
1
refspec: '+refs/merge-requests/*:refs/remotes/origin/mr/*'
-
1
[$class: 'GitSCM', branches: [[name: "origin/mr/${gitlabMergeRequestId}/head"]]
除了”gitlabMergeRequestId”外,Gitlab插件还往当前构建中注入了许多变量供构建Job使用:
1 |
|