Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Jenkins Multibranch Pipeline

Jenkins Multibranch Pipeline 是 Jenkins 的一个核心功能,用于管理多个分支的构建任务。

创建 Multibranch Pipeline

Jenkins -> New Item

填写 Name,选择 Multibranch Pipeline

  • 注意:Name 中不能包含特殊字符,如 /,不推荐使用空格(将空格替换为 -),建议和 Git 仓库名称一致
  • 原因:配置 Webhook 时,需要用到 Name,Name 中如果包含特殊字符,需要转换为 URL 编码。空格会被转换为 %20,如 test%20branch。

General 默认即可。

配置 Branch Sources

  • Branch Sources -> Add source -> Git

配置 Git:

  • Project Repository
  • Credentials

配置策略

限制分支,只允许以下规则的分支:

^(main|dev|test|prod|release/.*)$

配置构建 (默认即可)

如果 Webhook 需要 Token,则配置 Scan by webhook

  • 需要安装 Multibranch Scan Webhook Trigger 插件
  • 此处只做说明,不配置

保存 (Save)

Jenkins 会自动执行 Scan Multibranch Pipeline。

  • 如果没有自动触发 Scan Multibranch Pipeline,点击左侧的 Scan Multibranch Pipeline Now

进入 Status 页面,就可以看到状态了

  • 因为策略限制,dev 和 test 分支的代码进行了构建,tmp 分支的代码没有进行构建。

点击 dev 分支,进入详情页面,查看构建状态

点击 Builds -> #1 查看构建状态

点击 Console Output 查看构建日志

GitLab 配置 WebHook

spring-boot-hello 在 浏览器中的 URL 是 http://192.168.101.201:8200/job/spring-boot-hello/,webHook 的 URL 则是 http://192.168.101.201:8200/project/spring-boot-hello

  • 注意:这里的 Job Name 若包含特殊字符需要进行 URL 编码,所以 Job Name 为 Java Test,则 URL 编码为 Java%20Test

登录 GitLab,进入项目,点击 Settings -> WebHooks

点击 Add new webhook

配置 NameURL

  • 如果配置 Secret Token,则需要在 Jenkins 中配置前面提到的 Scan by webhook
  • Secret token 需要和 Scan by webhook 中的 Tigger token 保持一致

配置 Trigger

  • Push events
  • Tag push events
  • Merge request events
  • Releases events

忽略 SSL 验证

Add webhook

Webhook 添加成功

测试 Webhook

  • Test -> Push events

测试成功,提示 Hook executed successfully: HTTP 200,说明 GitLab 和 Jenkins 配置成功。

  • 因为多分支的原因,Jenkins 没有出发流水线,如果只有单个分支,就会触发流水线
  • 可以推送代码来触发流水线


定时任务

Jenkins Multibranch Pipeline 的 “Scan Multibranch Pipeline Triggers” 默认不直接显示标准 Cron 选项,而是仅有 “Periodically if not otherwise run”。这是正常现象,旨在控制仓库分支扫描频率,而非直接触发构建,通常通过此处的间隔设置(如 5 分钟)实现定期检查。

详细说明如下:

  • 默认配置:常用选项是 Periodically if not otherwise run (如果未其他运行,则定期运行),需配置时间间隔(如 H/5 * * * *),以定时扫描分支变化。
  • 实现 Cron 效果:在此间隔设置中输入类似 Cron 的表达式(如 H 0 * * * 表示每天凌晨执行)同样可以达到定时扫描的效果。
  • 触发方式区别:这里的配置仅用于触发 SCM 分支扫描(发现新分支或提交),具体的构建(Build)是由扫描到变化后的 Branch Source 触发。

若需更灵活的定时任务,建议在 Jenkinsfile 中使用 triggers { cron('H 0 * * *') } 配置。


Hook executed successfully but returned HTTP 403

匿名用户权限不足

现象:GitLab 无法访问 Jenkins 的构建接口。

解决方法

  • Manage Jenkins -> Security -> Authorization -> 启用 Project-based Matrix Authorization Strategy
  • Anonymous 用户(如果没有则添加),并勾选 Job/Read 和 Job/Build 权限