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

如何仅取消Pull Request的GitHub Action任务,合并后不取消?

解决方案

可以通过动态配置concurrency参数实现需求,无需拆分两个Workflow。核心思路是根据事件类型(pull_request/push)分别设置不同的并发组规则和取消逻辑:

name: CodeQL
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
concurrency:
  # PR事件用ref作为组标识,push事件用唯一的commit SHA作为组标识
  group: ${{ 
    github.event_name == 'pull_request' 
      ? format('{0}-{1}', github.workflow, github.ref) 
      : format('{0}-{1}', github.workflow, github.sha) 
  }}
  # 仅在PR事件时取消正在运行的旧任务
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
  codeql:
    name: CodeQL
    runs-on: ubuntu-22.04
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Initialize CodeQL
        uses: github/codeql-action/init@v2
        with:
          languages: go
      - name: Autobuild
        uses: github/codeql-action/autobuild@v2
      - name: CodeQL
        uses: github/codeql-action/analyze@v2

逻辑说明

  • Pull Request场景:
    • 并发组使用${github.workflow}-${github.ref},同一个PR的多次提交/更新会归属到同一组
    • cancel-in-progress设为true,新触发的任务会自动取消该组内正在运行的旧任务,符合预期
  • Push到main场景:
    • 并发组使用${github.workflow}-${github.sha},每个push的commit SHA是唯一的,因此每个任务都会属于独立的组
    • cancel-in-progress设为false,确保每个main分支的CodeQL分析都能完整执行,不会被后续push任务取消

这样就用单个Workflow实现了"PR自动取消旧任务,main分支任务不互相取消"的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:56:05