首页/开发/CI/CD 与发布速查/自动取消冗余流水线
流水线设计54 条

自动取消冗余流水线

同一分支连续推送时取消未跑的旧流水线:省资源、缩短反馈,避免「旧提交的结果淹没新提交」。

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

自动取消冗余运行

同一分支连续推送时取消未运行的旧流水线:省资源、缩短反馈,避免旧提交的结果淹没新提交。与互斥排队不同,这是保留最新、丢弃陈旧的策略:新运行取消旧运行,只关心最新一次的结果。发布类作业通常不参与取消,避免留下半发布状态;被取消的运行带专门标记,统计时要与失败区分。

基本信息

GitLab作业级 interruptible: true 配合项目级自动取消设置
GitHubconcurrency 加 cancel-in-progress: true
注意发布类作业不标记可中断,避免半发布状态
标记被取消的运行有专门状态,与失败区分统计
范围按环境与分支选择作用范围,避免误伤

典型使用场景

  • 高频推送分支:修复过程中连续提交,只关心最新一次。
  • 文档分支:非关键变更不占用并发额度。
  • 资源紧张:自动释放排队中的旧运行。
  • 流水线风暴:机器人连续推送时防止排队堆积。

GitLab

GitLab
test:
  interruptible: true
  script: npm test

GitHub

GitHub
concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true

两种机制对照

机制行为
cancel-in-progress新运行取消旧运行
resource group旧运行继续、新的排队等待
组合配置测试可取消、部署不取消
部署中作业不要标记可中断:中断后的环境状态需要人工核对。
取消要留痕:被取消的运行要与失败区分解释,否则团队会误读反馈面板。
作用范围收窄:并发组按分支或环境命名,避免跨分支误取消无关流水线。
与缓存配合的特殊性:被取消的分片可能没完成缓存上传,缓存预热交给独立作业更稳。
取消策略每季度复核:分支模型与工具变化后,原本合理的取消范围可能不再适用。
新旧流水线抢同一环境:取消只解决排队问题,环境互斥仍要靠资源组兜底。

易错点

  • 发布流水线整体打开取消:正在推行的部署被打断,可能留下半成品。
  • 分支保护要求旧运行结果:取消后检查状态变化,合并条件随之更新。
  • 取消策略作用于全部工作流:不可中断的工作流也被配了取消,关键任务被杀。
  • 团队误读取消状态:反馈里混入大量取消记录,需要标注说明。
  • 取消不彻底:已执行步骤的副作用要幂等处理,重跑才不会出错。
  • 依赖取消的缓存上传:运行被取消时缓存可能没上传,命中率波动要预期。

数据来源与参考

  • GitLab Docs《Auto-cancel redundant pipelines》
  • GitHub Docs《Using concurrency》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌