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

合并PR至master分支时github.ref的取值及GitHub Actions并发配置问题咨询

关于GitHub Actions中github.ref在合并PR时的指向及Concurrency配置问题

首先明确回答你的核心疑问:当你合并PR到master分支时,触发的推送工作流中github.ref确实指向的是master分支(即refs/heads/master),而不是原PR的分支。这是因为合并操作本质上是将PR分支的变更推送到了master分支,所以此时触发的是master分支的push事件,对应的ref自然是master分支的引用。

这就会导致你当前的concurrency配置出现问题:所有针对master分支的推送(包括PR合并、直接推送到master)都会被归到同一个${{github.ref}}组里,后面触发的工作流会自动取消前面正在运行的master分支工作流,这显然不符合你“不想取消master分支测试工作流”的需求。

下面给你两种可行的解决方案,你可以根据实际情况选择:

方案一:为master分支设置独立的Concurrency Group

通过条件判断,让master分支的每个工作流运行都使用包含commit SHA的唯一组名,这样每个master分支的运行都是独立的,不会互相取消;而其他分支仍然使用github.ref作为组名,实现同一分支旧运行自动取消的效果。

配置示例:

concurrency:
  # 如果是master分支,组名格式为master-<commit-sha>;否则使用github.ref
  group: ${{ github.ref == 'refs/heads/master' && format('master-{0}', github.sha) || github.ref }}
  cancel-in-progress: true

方案二:仅在非master分支启用取消正在运行的工作流

保持组名为github.ref,但通过条件判断,只在非master分支时开启cancel-in-progress,master分支则关闭该选项,这样master分支的多个运行可以同时存在,不会被后续运行取消。

配置示例:

concurrency:
  group: ${{ github.ref }}
  # 仅当分支不是master时,取消正在运行的旧工作流
  cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}

这两种方案都能解决你的问题:既保证了非master分支(包括PR原分支)的旧工作流会被新运行取消,又不会影响master分支的工作流运行,避免了合并PR时误取消其他master分支测试的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:27:40