Git 集成、多分支与不可信代码隔离

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

SCM(Source Code Management)是源代码管理;PR(Pull Request)是合并请求。目标:PR 自动测试,受保护主分支通过后才进入发布流程。

1. 先划分信任边界#

环境 允许的代码 可用权限
verify Controller 分支、外部 PR 只读源码、只读依赖源,无云发布权限
release Controller 已审查的受保护主分支 限定镜像仓库、预生产和生产发布身份

when { branch 'main' }、Agent label、Folder 和 Groovy sandbox 都不能独自防止恶意 Jenkinsfile 窃取凭据。 不可信代码可能改流水线、调用其他步骤或探测元数据服务;本路径使用独立 Controller、执行节点、云账号/角色和网络边界。官方说明

2. GitHub 多分支 Hands-on#

  1. 管理员安装固定版本 GitHub Branch Source、Git、Pipeline 插件;GitLab 项目改用其受支持的 Branch Source 插件并单独核对权限。
  2. 创建只安装在实验仓库的 GitHub App:按插件要求授予仓库元数据、Contents 与 Pull requests 只读,以及实际需要的 Checks/Commit Status 写权限。Webhook 管理权限仅在自动管理 webhook 时授予;不使用个人全权限 token。
  3. 在 verify Controller 创建 Folder,再建 Multibranch Pipeline;Branch Source 选择 GitHub,配置 App 凭据、组织与仓库。
  4. 开启 branch discovery、origin PR discovery;明确选择测试 PR head 还是合并目标分支后的结果,避免重复构建。外部 fork 的 trust policy 选最严格选项,测试前确认陌生作者不能提供可信 Jenkinsfile。
  5. 配置仓库 webhook 到 https://jenkins.example.com/github-webhook/;启用所选插件支持的 webhook secret 验签,密钥不放仓库。内网 Jenkins 使用平台 webhook relay,只开放该受控路径,不把管理界面暴露公网。
  6. 设置 Jenkinsfile 路径、丢弃旧分支构建的数量/天数,并运行 Scan Repository Now。Webhook 丢失时配置合理的定期索引作为补偿,避免每分钟扫整个组织。

3. 保护主分支和验证结果#

仓库设置:禁止直接 push、要求审查、要求对应 Jenkins 检查成功;保护 Jenkinsfile、ci/、Dockerfile 和共享库的变更。release Controller 创建固定主分支 Pipeline,仓库 URL、分支和凭据由平台控制,不能由构建参数任意指定。

执行四个验收:普通分支通过测试;失败测试阻止合并;fork PR 不出现发布凭据且无法访问云元数据/生产网络;合并后发布 Job 能精确记录构建的 commit。Webhook 多次投递不能产生重复发布,需对提交号去重;并发控制只避免同时执行,不能消除重复触发。

故障时先查 webhook delivery、签名、反向代理、仓库权限,再查分支索引日志。重新索引不会证明某个旧构建的代码已更新,必须核对 commit。GitHub Branch Source

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭