如何在Github Actions中取消启动中的运行并等待待处理运行完成?
实现GitHub Actions中取消正在运行任务、等待待处理任务完成的方案
GitHub Actions原生的concurrency配置(cancel-in-progress: true)仅支持新启动的运行取消正在进行的旧运行,要实现相反逻辑——取消所有正在进行的运行,等待队列中的待处理运行完成,需要结合GitHub CLI(gh)编写自定义脚本完成。
具体实现Workflow示例
name: 管理运行队列并执行任务 on: [push] jobs: manage-runs: runs-on: ubuntu-latest timeout-minutes: 120 # 根据待处理任务数量调整超时时间 steps: - name: 安装GitHub CLI uses: actions/setup-node@v4 with: node-version: '20' - run: npm install -g @github/cli - name: 授权GitHub CLI run: echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token - name: 获取同组的运行列表 id: fetch-runs run: | # 定义与实际任务一致的并发组名称,这里用分支名作为标识 CONCURRENCY_GROUP="task-group-${{ github.ref_name }}" # 筛选出同组的正在运行/待处理运行,排除当前运行本身 RUN_DATA=$(gh run list --repo ${{ github.repository }} --group "$CONCURRENCY_GROUP" --status in_progress,queued --json id,status --exclude ${{ github.run_id }}) echo "runs=$RUN_DATA" >> $GITHUB_OUTPUT - name: 取消所有正在运行的任务 run: | # 解析JSON,提取正在运行的任务ID IN_PROGRESS_IDS=$(echo '${{ steps.fetch-runs.outputs.runs }}' | jq -r '.[] | select(.status == "in_progress") | .id') for RUN_ID in $IN_PROGRESS_IDS; do echo "正在取消运行: $RUN_ID" gh run cancel $RUN_ID done - name: 等待所有待处理任务完成 run: | # 解析JSON,提取待处理的任务ID QUEUED_IDS=$(echo '${{ steps.fetch-runs.outputs.runs }}' | jq -r '.[] | select(.status == "queued") | .id') for RUN_ID in $QUEUED_IDS; do echo "等待运行 $RUN_ID 完成..." gh run watch $RUN_ID done # 你的实际业务任务,依赖上面的管理任务完成 business-task: needs: manage-runs runs-on: ubuntu-latest concurrency: group: task-group-${{ github.ref_name }} cancel-in-progress: false steps: - name: 执行业务逻辑 run: | echo "开始执行实际任务..." # 这里替换成你的业务命令
关键说明
- 并发组一致性:
manage-runs任务中定义的CONCURRENCY_GROUP必须和business-task的concurrency.group完全一致,才能准确筛选出同组的运行。 - 权限保障:默认的
GITHUB_TOKEN已经具备操作仓库Workflow运行的权限,无需额外配置密钥。 - 避免自取消:用
--exclude ${{ github.run_id }}排除当前运行,防止脚本误取消自己。
注意事项
- 如果待处理任务较多或单任务执行时间长,需调整
manage-runs的timeout-minutes,避免Job超时中断。 gh run watch会逐个等待待处理任务完成,若需要并行等待,可编写shell脚本结合后台进程实现。- 该方案依赖GitHub CLI,确保Runner环境能正常安装并使用gh命令(Ubuntu默认支持,Windows/macOS可能需要调整安装步骤)。
内容的提问来源于stack exchange,提问作者カルロサグ
相关产品推荐
相关产品推荐

