Jenkins Multibranch Pipeline
Jenkins Multibranch Pipeline 是 Jenkins 的一个核心功能,用于管理多个分支的构建任务。
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 查看构建日志

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

配置 Name 和 URL
- 如果配置 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 * * *') } 配置。
匿名用户权限不足
现象:GitLab 无法访问 Jenkins 的构建接口。
解决方法:
- Manage Jenkins -> Security -> Authorization -> 启用 Project-based Matrix Authorization Strategy
- Anonymous 用户(如果没有则添加),并勾选 Job/Read 和 Job/Build 权限
