多分支流水线实验
I’m happy to translate the article for you, but I’ll need the text you’d like translated. Could you please paste the content (or the portion you want translated) here? I’ll keep the source link, formatting, markdown, and any code blocks exactly as they are.
为什么多分支很重要(DevOps 原因)
在普通的 Jenkins 任务中,你通常只会构建 一个分支,而 webhook 往往无法清晰地映射到“哪个分支/任务”。
Multibranch Pipeline 会自动:
- 在 GitHub 中发现分支
- 自动构建对应的分支
- 为每个分支创建一个任务(集中管理)
- 支持 PR 工作流(真实团队的 CI)
- 去除 “点击 Build Now” 的步骤
在生产环境中,DevOps 需要 对每个分支/PR 进行 CI,而不仅仅是对 main 分支。
我们在真实公司中使用哪些分支?
最常见的生产模式
模式 A(最简洁、常见)
main → production‑ready
feature/* → developer work
PR → merge to main
模式 B(带发布稳定性)
main → production
develop → integration / staging
feature/* → PR to develop
release → merge to main
对于初学者,请使用模式 A。
需要创建更多分支吗?
✅ 是 – 至少需要一个功能分支,因为 multibranch 旨在自动构建 多个分支。
您将创建:
mainfeature/hello-ci
这就足够了。
Source: …
第 1 部分 – 创建 GitHub 仓库(含 Jenkinsfile)
步骤 1 – 创建仓库
GitHub → New repository
- Name(名称):
jenkins-multibranch-lab - 公有或私有(任选其一)
将仓库克隆到本地机器。
步骤 2 – 创建文件
在仓库内部:
app.sh
#!/bin/bash
echo "Hello from branch: $(git rev-parse --abbrev-ref HEAD)"
echo "Running on host: $(hostname)"
test.sh
#!/bin/bash
if [ -f app.sh ]; then
echo "TEST PASSED"
exit 0
else
echo "TEST FAILED"
exit 1
fi
赋予可执行权限:
chmod +x app.sh test.sh
步骤 3 – 添加 Jenkinsfile(分支感知)
在仓库根目录创建 Jenkinsfile:
pipeline {
agent any
options {
timestamps()
disableConcurrentBuilds()
}
stages {
stage('Checkout Info') {
steps {
sh '''
echo "Branch: ${BRANCH_NAME}"
echo "Commit: $(git rev-parse --short HEAD)"
'''
}
}
stage('Build') {
steps {
sh './app.sh'
}
}
stage('Test') {
steps {
sh './test.sh'
}
}
}
post {
success { echo "CI SUCCESS for ${BRANCH_NAME}" }
failure { echo "CI FAILED for ${BRANCH_NAME}" }
always { cleanWs() }
}
}
提交并推送到 main 分支:
git add .
git commit -m "Add multibranch CI lab"
git push origin main
Source: …
第 2 部分 – 在 Jenkins 中创建多分支流水线(UI 步骤)
步骤 4 – 创建任务
Jenkins 仪表盘 → New Item
- 名称:
multibranch-ci-lab - 类型: Multibranch Pipeline → OK
步骤 5 – 配置仓库来源
Branch Sources → Add source → GitHub
-
凭据:
- 公共仓库 – 不需要
- 私有仓库 – 需先在 Jenkins Credentials 中添加 GitHub token
-
仓库 HTTPS URL: 粘贴你的仓库地址。
步骤 6 – 构建配置
- 模式: by Jenkinsfile
- 脚本路径:
Jenkinsfile(默认)
步骤 7 – 分支发现(重要)
找到 Behaviors → Discover branches 并启用它。
(可选)稍后启用 “Discover pull requests”。
对初学者友好的选项:正常构建分支。
步骤 8 – 保存并扫描
点击 Save。Jenkins 将启动 Scan Multibranch Pipeline,查找包含 Jenkinsfile 的分支,并自动创建相应的任务(例如,为 main 分支创建一个任务)。
PART 3 – Webhook(使其自动触发)
Step 9 – 配置 GitHub webhook
GitHub 仓库 → Settings → Webhooks → Add webhook
-
Payload URL:
- 如果 Jenkins 仅在本地运行 – 使用 ngrok / 公网 URL
- 如果 Jenkins 可通过互联网访问 – 使用该 URL
-
Content type:
application/json -
Events: 仅推送事件(适合初学者)– 以后可以再添加 “Pull request”。
现在,GitHub 的推送将触发 Jenkins 的扫描/构建。
PART 4 – 创建功能分支(真实生产工作流)
第 10 步 – 创建功能分支
git checkout -b feature/hello-ci
编辑 app.sh 并修改消息:
echo "Hello from FEATURE branch"
提交并推送:
git add app.sh
git commit -m "Update app output on feature branch"
git push -u origin feature/hello-ci
现在应该会发生的情况
- GitHub 发送 webhook。
- Jenkins 多分支检测到新分支。
- Jenkins 自动为
feature/hello-ci创建作业并运行 CI 流水线——无需手动 “Build Now”。
第5部分 – 合并到 main(真实生产是如何进行的)
步骤 11 – 打开 PR
GitHub → Pull Requests → New PR
- 基准分支:
main - 比较分支:
feature/hello-ci
在真实团队中:
- 进行 PR 评审。
- 合并前必须通过 CI(分支保护)。
合并 PR。
步骤 12 – 合并后 Jenkins 的行为
- 合并会触发 GitHub webhook。
- Jenkins 为
main运行流水线。 main现在包含更新后的代码,CI 结果会显示。
为什么多分支很重要
每个分支在触及 main 之前都会自行验证。
DevOps 必须关注的事项(日常工作)
1) Webhook 健康
推送未触发?
- 检查 Webhook delivery logs(GitHub 中的 Webhook 交付日志)
- 查看 Jenkins logs(Jenkins 日志)
- 验证 URL(例如,ngrok 可能已失效)
2) 分支发现设置
分支未构建?
- Jenkins 可能尚未发现该分支
- 该分支可能缺少
Jenkinsfile - 过滤器可能将其排除
3) 凭证
私有仓库检出失败?
- 缺少 GitHub token
- token 的权限设置不正确
4) Agent
如果流水线使用 agent { label 'mac-agent' }
- Agent 必须处于在线状态
- Agent 上必须存在对应的 label
5) 构建稳定性
- 不稳定的测试
- 构建时间过长
- 工作区清理问题
为什么公司 需要 Multibranch(Production Answer)
Multibranch 强制:
- 对 每个 分支进行 CI(不仅仅是
main) - 自动创建分支作业
- 跨分支保持一致的构建
- 基于 PR 的工作流
- 减少手动点击
- 清晰的可追溯性:分支 → 构建 → 提交
面试准备答案
“Multibranch Pipeline 用于通过 pipeline‑as‑code 自动构建每个分支/PR,这符合真实的 GitHub 工作流,避免手动作业管理。”