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

如何强制终止卡住且无法取消的GitHub Actions工作流?

强制终止卡住的GitHub Actions工作流的解决方案

问题根源分析

将concurrency配置从根工作流移至子工作流(workflow_call)后,易出现并发锁未正确释放的异常:系统误判工作流已完成,但实际锁仍被占用,导致后续工作流排队阻塞;部分卡住的工作流因平台状态同步延迟,常规取消命令无法生效。

解决方法

1. 清理并发锁(针对concurrency导致的排队阻塞)

若确认是并发组锁占用导致后续工作流无法运行,直接删除对应并发组的锁:

  • 先查询当前仓库中处于排队/运行状态的工作流及其并发组:
    gh api repos/{owner}/{repo}/actions/runs --filter ".workflow_runs[] | select(.status == \"queued\" or .status == \"in_progress\") | .name, .id, .concurrency_group"
    
  • 替换{owner}、{repo}为实际值,找到卡住的并发组名称后,执行删除命令:
    gh api --method DELETE repos/{owner}/{repo}/actions/concurrency-groups/{group-name}
    

2. 强制更新工作流状态(针对系统误判为“已完成”的卡住实例)

对于提示gh: Cannot cancel a workflow run that is completed. (HTTP 409)但实际卡住的工作流,强制将其状态标记为失败:

  • 获取目标工作流的run-id(在Actions页面的run详情URL中提取数字)
  • 执行状态更新命令:
    gh api --method PATCH repos/{owner}/{repo}/actions/runs/{run-id} -f status="completed" -f conclusion="failure"
    
  • 若上述命令无效,重复执行取消命令(部分情况是状态同步延迟导致的误判):
    gh api --method POST repos/{owner}/{repo}/actions/runs/{run-id}/cancel
    

3. 极端情况:请求GitHub官方支持

如果所有命令都无法解决问题,说明是平台内部状态不一致导致的异常,需提交支持工单:

  • 进入仓库的Settings -> Support -> Contact GitHub Support
  • 提供以下信息:卡住的工作流run ID、concurrency配置代码片段、已尝试的操作记录,请求手动清理锁或重置工作流状态

后续配置建议

  • 避免在子工作流单独配置concurrency,建议在根工作流统一配置,确保锁的释放逻辑一致
  • 若需在子工作流使用并发控制,确保根、子工作流的concurrency.group名称匹配,例如使用动态变量:
    concurrency:
      group: ${{ github.head_ref || github.run_id }}
      cancel-in-progress: true
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:30:09