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


    楔子

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

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

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

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

    流程

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

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

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

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

    配置

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

    pipeline{
        //省略无关配置
        triggers {
            gitlab(
                triggerOnPush: true,
                triggerOnMergeRequest: false,
                triggerOpenMergeRequestOnPush: "never",
                acceptMergeRequestOnSuccess: false,
                triggerOnApprovedMergeRequest: true,
                branchFilterType: "NameBasedFilter",
                includeBranchesSpec: "develop",
                secretToken: "thisisfrontendpublish"
            )
        }
        //省略无关配置
    }
    

    以上配置参数说明:

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

    更多参数说明:

    参数名 参数说明 默认值
    triggerToBranchDeleteRequest 删除分支时触发 false
    triggerOnlyIfNewCommitsPushed 仅当新提交推送时 false
    triggerOnAcceptedMergeRequest acceptMergeRequestOnSuccess 类似 false
    triggerOnClosedMergeRequest 关闭 Merge Request 时触发 false
    triggerOnNoteRequest 注释触发,根据提交时写的注释触发 true
    noteRegex 注释触发正则表达式 Jenkins please retry a build
    ciSkip 允许 CI 跳过 true
    skipWorkInProgressMergeRequest 跳过正在合并过程中的 Merge Request true
    setBuildDescription 是否添加构建触发原因描述 true
    triggerOnPipelineEvent GitLab Pipeline 事件触发 false
    cancelPendingBuildsOnUpdate 当源码更新时取消正在 Pending 状态的构建,适当开启有助于减少构建次数,毕竟大家只关心最新的构建结果 false
    excludeBranchesSpec branchFilterTypeNameBasedFilter生效,指定排除哪些分支的事件 ""
    sourceBranchRegex 分支匹配类型为 RegexBasedFilter 时源分支正则 ""
    targetBranchRegex 分支匹配类型为 RegexBasedFilter 时目标分支正则 ""
    mergeRequestLabelFilterConfig 根据标签过滤 Merge Request 配置 非 null
    includeMergeRequestLabels mergeRequestLabelFilterConfig 块中设置包含的 Merge Request 的标签,多个标签以英文逗号分隔 ""
    excludeMergeRequestLabels mergeRequestLabelFilterConfig 块中设置排除的 Merge Request 的标签,多个标签以英文逗号分隔 ""

    源码及配置参考:

    查看 Jenkins 流水线触发器

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

    配置 GitLab webhook

    在需要添加提交/合并请求的仓库上操作。

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

    最后

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

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

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

  • 相关阅读:
    C++ Opencv 傅里叶变换的代码实现及关键函数详解
    C++ Opencv createTrackbar()创建滑动条实现对比度、亮度调节及注意事项
    C++ Opencv Mat类型使用的几个注意事项及自写函数实现Laplace图像锐化
    C++ Opencv split()通道分离函数 merge()通道合并函数 使用操作详解
    如何将nupkg文件安装到VS2017
    [C#]如何访问及调用类中私有成员及方法
    [C#]使用Redis来存储键值对(Key-Value Pair)
    [C#]使用log4net记录日志
    [C#]使用Quartz.NET来创建定时工作任务
    [C#]使用IFormattable接口来实现字符串格式化
  • 原文地址:https://www.cnblogs.com/hellxz/p/how-to-add-gitlab-trigger-for-jenkins.html
Copyright © 2020-2023  润新知