【精选】Jenkins教程(七)实现 GitLab 提交/合并代码触发构建

您所在的位置:网站首页 jenkins操作记录 【精选】Jenkins教程(七)实现 GitLab 提交/合并代码触发构建

【精选】Jenkins教程(七)实现 GitLab 提交/合并代码触发构建

#【精选】Jenkins教程(七)实现 GitLab 提交/合并代码触发构建| 来源: 网络整理| 查看: 265

楔子

最近公司推行统一构建平台(基于 Jenkins + Kubernetes 插件创建 slave),原来部门自建的 Jenkins 不让用了。

迁移上统一构建平台的最大阻力是前端模块发布的问题:

前端单仓库全量构建/发布,安装依赖有缓存在小型机上跑着效率还行,如果迁到公司平台上性能相对低些,又没依赖缓存,构建一次需要拉下约 15G 的依赖!迭代分支仅允许合并分支,通过 GitLab API 取不到 Merge Request 变更文件列表。

基于这个问题,研究了一下午 GitLab Plugin 官方文档和仓库,实现了 Jenkins 声明式流水线 GitLab 提交/合并代码触发构建,记录下来。

2022.01.21更新:去除GitLab webhook的合并请求事件及移除gitlab插件触发器无效合并请求配置。原因是合并请求创建时会误触发。实验发现合并请求审批者同意合并时发起的是push请求,去除后不影响需要。

流程

如图,GitLab 在开发者推送或合并代码时触发 webhook,向 webhook URL 发送一个 HTTP 请求(即 Jenkins 流水线配置触发器的地址),Jenkins 流水线触发器启动构建与发布流程。

所以,实现需求只做以下两件事:

配置 Jenkins 流水线,添加触发器GitLab 绑定 webhook

本着快速解决问题,再夹带扩展知识的原则,接下来我们先讲如何配置,更多参数将放到最后。

配置 配置 Jenkins 流水线,添加GitLab触发器 pipeline{ //省略无关配置 triggers { gitlab( triggerOnPush: true, triggerOnMergeRequest: false, branchFilterType: "NameBasedFilter", includeBranchesSpec: "develop", secretToken: "thisisfrontendpublish" ) } //省略无关配置 }

以上配置参数说明:

参数名参数说明默认值triggerOnPush是否 Push 事件时触发truetriggerOnMergeRequest是否 Merge Request 事件时触发,MR 包含创建、变更、接受等很多情况truetriggerOpenMergeRequestOnPushMerge Request 中源分支或目的分支被Push时触发falseacceptMergeRequestOnSuccess构建成功时向GitLab发起接收 Merge Request 事件falsetriggerOnApprovedMergeRequestMR 被批准时触发truebranchFilterType分支匹配类型:基于名称 NameBasedFilter,基于正则表达式 RegexBasedFilter,两者混用 ALLALLincludeBranchesSpecbranchFilterType 为 NameBasedFilter生效,监听哪些分支的事件,多分支使用英文逗号分开“”secretToken类似一个密码,用于外部调用此工程时校验“”

更多参数说明:

参数名参数说明默认值triggerToBranchDeleteRequest删除分支时触发falsetriggerOnlyIfNewCommitsPushed仅当新提交推送时falsetriggerOnAcceptedMergeRequest与 acceptMergeRequestOnSuccess 类似falsetriggerOnClosedMergeRequest关闭 Merge Request 时触发falsetriggerOnNoteRequest注释触发,根据提交时写的注释触发truenoteRegex注释触发正则表达式Jenkins please retry a buildciSkip允许 CI 跳过trueskipWorkInProgressMergeRequest跳过正在合并过程中的 Merge RequesttruesetBuildDescription是否添加构建触发原因描述truetriggerOnPipelineEventGitLab Pipeline 事件触发falsecancelPendingBuildsOnUpdate当源码更新时取消正在 Pending 状态的构建,适当开启有助于减少构建次数,毕竟大家只关心最新的构建结果falseexcludeBranchesSpecbranchFilterType 为 NameBasedFilter生效,指定排除哪些分支的事件“”sourceBranchRegex分支匹配类型为 RegexBasedFilter 时源分支正则“”targetBranchRegex分支匹配类型为 RegexBasedFilter 时目标分支正则“”mergeRequestLabelFilterConfig根据标签过滤 Merge Request 配置非 nullincludeMergeRequestLabelsmergeRequestLabelFilterConfig 块中设置包含的 Merge Request 的标签,多个标签以英文逗号分隔“”excludeMergeRequestLabelsmergeRequestLabelFilterConfig 块中设置排除的 Merge Request 的标签,多个标签以英文逗号分隔“”

源码及配置参考:

https://github.com/jenkinsci/gitlab-plugin/blob/master/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.javahttps://github.com/jenkinsci/gitlab-plugin/blob/master/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly

查看 Jenkins 流水线触发器

修改完成流水线,如果是版本控制的脚本需提交再执行一下构建以更新触发器配置。

配置 GitLab webhook

在需要添加webhook的仓库上操作。

到这步配置完成就可以提交/合并请求测试构建是否被触发了。

最后

文章看起来内容虽然不多,但官方给了几个例子例子有点坑人,没看到哪里列出来各参数的作用,最坑的是 includeBranchesSpec 这个参数官方示例是 release/qat,导致误认为多分支需要用 / 分开。。。

写完这篇文章还是有收获的——清楚了很多参数的作用,如果后续用到不会太抓瞎。

本文同步发布于博客园(东北小狐狸 https://www.cnblogs.com/hellxz/)与CSDN(东北小狐狸-Hellxz https://blog.csdn.net/u012586326)禁止转载。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3