首页/开发/CI/CD 与发布速查/手动门与人工审批作业
流水线设计54 条

手动门与人工审批作业

把「上生产」「删数据」等敏感动作设为手动触发或需审批:自动化负责准备,由人按下最后一步。

CI/CD 与发布速查开发更新于 2026-10-13

手动门是干什么的

把上生产、删数据等敏感动作设为手动触发或需审批:自动化负责准备,由人按下最后一步。三种常见形态:作业级手动(GitLab 的 when: manual)、环境级审批(GitHub environment 配置必需审批人)、流程暂停确认(Jenkins 的 input 步骤)。要理解语义差异:GitLab 手动作业默认不阻塞流水线,不执行也视为成功;需要卡住后续阶段时配置 allow_failure: false。

基本信息

GitLabwhen: manual;阻塞语义配 allow_failure: false
GitHubenvironment 配必需审批人,批准后才进入该环境作业
Jenkinsinput 步骤暂停等待确认
审批要点审批人能看到变更内容与验证结果
权限边界审批人与提交人分离,避免自己批自己

典型使用场景

  • 上生产门:验证与预发都自动,生产部署保留人工确认。
  • 危险操作:删库、清理数据、批量修复任务前加确认步骤。
  • 发布窗口:等业务通知后再放行,而不是流水线跑完立即上线。
  • 合规审计:谁在何时批准了哪个版本,有记录可查。
  • 外部依赖确认:等第三方系统就绪或对端升级完成后继续。
  • 审批演练:定期走一次完整审批流,验证通知与权限没有失效。

GitLab 手动部署

GitLab 手动部署
deploy-prod:
  stage: deploy
  when: manual
  allow_failure: false   # 不点就不算成功,卡住流水线
  script: ./ci/deploy.sh prod

Jenkins input

Jenkins input
stage('Approve') {
  steps { input '确认发布到生产?' }
}
审批人应能看到变更内容与验证结果(合并请求链接、测试报告),避免盲批。
手动作业默认不阻塞流水线:不配置阻塞语义时,未执行的手动步骤不会挡住后续阶段,敏感门要保持警惕。
审批不是慢的同义词:把审批收敛到上生产与危险操作两个点,其余环节全自动,流程整体仍然高效。

易错点

  • 手动作业默认不阻塞:不执行也视为成功,需要卡住流水线时显式设置 allow_failure: false。
  • 审批人就是提交人:敏感环境应配置独立审批人与受保护环境,让批准成为独立控制点。
  • 审批界面信息不足:只能看到通过或拒绝,看不到变更与验证结果,导致盲批。
  • 审批粒度错误:给每个作业都设审批导致流程空转,应该只对敏感动作设门。
  • 手动门长期没人处理:流水线挂起无人跟进、通知堆积,应设置提醒与过期处理机制。

数据来源与参考

  • GitLab Docs《Manual jobs》
  • GitHub Docs《Deployment protection rules》
  • Jenkins Handbook《Pipeline Syntax》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌