首页/开发/CI/CD 与发布速查/GitHub Actions concurrency 并发控制
工具链要点63 条

GitHub Actions concurrency 并发控制

用 concurrency 给运行分组:同组内限制并发,可配置新运行取消进行中的旧运行;部署场景建议保留串行而非自动取消。

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

concurrency 并发控制是什么

用 concurrency 给运行分组:同组内限制并发,可配置新运行取消进行中的旧运行;部署场景建议保留串行而非自动取消。同一分组内未取消的运行按序等待,分组键常用分支或工作流加环境的组合,防止不同环境互相取消。取消只作用于同组运行,不会影响其他分组。

基本信息

group分组键,常用分支或工作流名
cancel-in-progress新运行取消同组进行中的运行
部署建议不自动取消,避免半完成状态
行为同组未取消的运行按序等待
取消语义被取消的运行标记为取消并停止后续步骤
组合键可拼接仓库名与工作流名避免跨工作流冲突

两种策略

策略配置适用场景
去重取消开启取消进行中测试与检查类任务
排队串行不自动取消部署与发布任务
按键隔离分组键加环境名多环境互不干扰
跨工作流分组键加仓库或工作流前缀避免其他工作流互相影响

按分支去重与部署排队

按分支去重与部署排队
# 按分支去重:检查类任务
concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true
# 部署:按环境排队,不取消
concurrency:
  group: deploy-${{ inputs.environment }}

典型使用场景

  • 频繁推送去重:同一分支只保留最新一次检查运行
  • 部署串行:同一环境同一时间只跑一个发布
  • 多环境隔离:分组键包含环境名,避免互相取消
  • 资源保护:限制共享资源上并发运行的作业数
  • 成本控制:取消过期运行,减少排队与用量
  • 手动触发排队:同一分支重复触发时只保留有效运行
  • 故障隔离:异常运行卡住时,同组后续运行按序等待不互相覆盖
部署并发开启自动取消有风险:被取消的发布需要人工确认与清理。
分组键粒度要按场景选择:过粗互相取消、过细则失去限制意义。
分组键按字符串比较:拼写不一致的运行不会互相约束,先在测试仓库验证语义。

易错点

  • 分组键粒度不当:跨环境互相取消
  • 期望排队却看到取消:cancel-in-progress 的语义要按需选择
  • 部署沿用自动取消:发布的中间状态(迁移、切换)被中断
  • 任务不幂等时排队重放:重复执行产生重复副作用,需在任务内做幂等保护

数据来源与参考

  • GitHub Docs《Using concurrency》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌