You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions 触发新流水线时取消同一PR正在运行的旧流水线咨询

问题解答

concurrency group 含义

concurrency 的 group 字段是并发控制的唯一分组标识,所有分配到同一个分组的 workflow 运行实例/Job 同一时间只能有一个处于运行状态。当 cancel-in-progress 设置为 true 时,同一分组内新的运行实例触发后,会自动取消分组中所有正在运行的旧实例。

配置失效&报错的原因

你当前使用的分组规则 CI-${GITHUB_REF#refs/heads/} 是专门适配分支推送事件的写法,对于 PR 触发的场景完全不适用:
PR 事件触发时,GITHUB_REF 的格式为 refs/pull/[PR编号]/merge,并不以 refs/heads/ 为前缀,所以你写的变量截取规则无法正确生成唯一标识,要么会把不同 PR 的任务分到同一个分组,要么会出现变量解析错误直接导致构建失败。

正确配置方案

如果要实现「同一 PR 下新构建触发时自动取消所有旧的构建任务」,直接在 workflow 根层级添加如下配置即可:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

配置说明:

  • ${{ github.workflow }} 取当前 workflow 的名称,避免和仓库内其他 workflow 的并发分组冲突
  • ${{ github.event.pull_request.number }} PR 触发时直接取唯一的PR编号,确保同一个PR的所有构建都分到同一组
  • 末尾的 || github.ref 是兜底逻辑,如果你后续修改触发规则支持push等其他事件,也能正常生成唯一分组

如果你需要单独控制每个Job的并发(比如只取消同PR下app-1的旧任务,不影响app-2的运行),把上述concurrency配置分别放到每个Job的配置下即可。


内容的提问来源于stack exchange,提问作者gamechanger17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:18:04