Jenkins 配置多分支自动构建的核心是使用“多分支流水线(Multibranch Pipeline)”项目类型,并通过“扫描多分支流水线触发器”或 Webhook 实现自动发现与构建。适用场景为 Git 仓库包含多个开发分支且每个分支都有 Jenkinsfile 的情况,风险边界在于频繁扫描可能增加服务器负载。
先说结论:必须选择多分支流水线项目类型,依赖分支索引机制识别新分支,配合 Webhook 或定时扫描触发构建。
- 适合:Git 仓库中存在多个并行开发分支,且每个分支根目录包含 Jenkinsfile 的项目。
- 先准备:确认 Jenkins 已安装 Branch Source 插件(如 GitHub Branch Source 或 GitLab Branch Source),并配置好仓库凭证。
- 验收:新建分支推送到仓库后,Jenkins 自动创建对应任务队列并执行构建。
命令速用版
多分支流水线主要通过 Jenkins Web 界面配置,无单一命令行开关,快速处理思路如下:
- 新建任务选择“多分支流水线(Multibranch Pipeline)”。
- 在“分支源(Branch Sources)”中添加 Git 或 GitHub 源。
- 在“行为(Behaviors)”中确认“发现分支(Discover branches)”策略。
- 在“扫描多分支流水线触发器(Scan Multibranch Pipeline Triggers)”中设置定时规则或配置 Webhook。
为什么会这样
多分支流水线的自动构建依赖“分支索引(Indexing)”而非传统单任务的轮询。Jenkins 会先扫描仓库结构,识别包含 Jenkinsfile 的分支,为每个分支生成独立的 Pipeline 任务,只有索引完成后才会根据触发器决定是否构建。
传统流水线项目针对单一分支,而多分支流水线项目本身是一个容器,负责管理子任务。如果未配置触发器,Jenkins 仅在手动点击“扫描”时更新分支列表,不会自动构建新提交。
分步处理
步骤 1:创建多分支流水线任务
点击“新建任务”,输入名称,选择“多分支流水线”,点击“确定”。进入配置页后,无需指定单一分支,系统会自动识别。
步骤 2:配置分支源
在“分支源”区域点击“添加源”,选择对应类型(如 Git 或 GitHub)。填写仓库 URL,在 Credentials 中选择已添加的仓库访问凭证。公开仓库可选择 none。
步骤 3:配置分支发现策略
点击分支源下的 Behaviors,确保存在 Discover branches 项。默认策略通常为 All branches,可根据需求改为 Excluding branches that match names 来过滤特定分支。
步骤 4:设置自动触发
向下滚动找到“扫描多分支流水线触发器”。勾选“定期扫描(Periodically if not otherwise run)”,输入 Cron 表达式(如 H/5 * * * * 表示最多每 5 分钟扫描一次)。若需实时触发,需在 Git 服务商配置 Webhook 指向 Jenkins。
怎么验证是否生效
查看“扫描多分支流水线日志(Scan Multibranch Pipeline Log)”。在任务首页左侧菜单点击该链接,确认日志中显示 Processed branch 且状态为 Created 或 Updated。
推送新 commit 到非保护分支,观察是否自动生成新的子任务条目。若配置了 Webhook,检查 Jenkins 系统日志中是否有 Hook 接收记录。
常见坑
Jenkinsfile 路径错误:多分支流水线默认查找根目录下的 Jenkinsfile。若文件在子目录,需在“脚本路径(Script Path)”中指定相对路径。
权限不足导致扫描失败:凭证仅拥有读代码权限但无读取元数据权限时,分支索引可能不完整。确保凭证能访问仓库 API。
触发器冲突:同时开启定时扫描和 Webhook 可能导致重复构建。建议优先使用 Webhook,定时扫描仅作为兜底机制。
常见问题
多分支流水线和普通流水线有什么区别?
多分支流水线自动为每个分支创建子任务,普通流水线仅针对配置的单一分支。多分支适合功能分支开发模式,普通流水线适合固定分支部署。
如何忽略特定分支的构建?
在分支源的 Behaviors 中添加 Exclude branches that match names,使用正则表达式匹配不需要构建的分支名称。
必须配置 Webhook 才能自动构建吗?
不是。可以使用“定期扫描”触发器实现自动构建,但会有延迟。Webhook 能实现提交即构建,实时性更高。
参考来源
- Jenkins Official Documentation, "Multibranch Pipeline", https://www.jenkins.io/doc/book/pipeline/multibranch/
- Jenkins Plugins, "GitHub Branch Source Plugin", https://plugins.jenkins.io/github-branch-source/