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

如何让GitHub Actions按顺序执行(无需额外包导入)

实现GitHub Actions顺序执行(无需额外依赖)

核心思路

利用GitHub API查询当前仓库中同类型Workflow的运行状态,循环等待直到上一次运行完成,再触发当前任务。

具体实现步骤

1. 配置Workflow权限

在Workflow文件开头添加权限配置,确保能读取Workflow运行状态:

permissions:
  actions: read
  contents: read

2. 添加等待逻辑步骤

在需要等待的任务前,加入一段使用curl和jq查询API的脚本:

jobs:
  sequential-job:
    runs-on: ubuntu-latest
    steps:
      - name: 等待上一次同类型Workflow完成
        id: wait-for-previous
        run: |
          # 获取当前Workflow的名称
          WORKFLOW_NAME="${{ github.workflow }}"
          # 获取当前运行的ID
          CURRENT_RUN_ID="${{ github.run_id }}"
          
          # 循环查询直到上一次运行完成
          while true; do
            # 调用GitHub API获取最近的Workflow运行记录
            RESPONSE=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
              "https://api.github.com/repos/${{ github.repository }}/actions/workflows/${WORKFLOW_NAME}/runs?status=in_progress&per_page=1")
            
            # 解析是否有正在运行的其他实例(排除当前运行)
            IN_PROGRESS=$(echo "$RESPONSE" | jq -r ".workflow_runs[] | select(.id != $CURRENT_RUN_ID) | .id")
            
            if [ -z "$IN_PROGRESS" ]; then
              echo "无正在运行的同类型Workflow,继续执行任务"
              break
            else
              echo "上一次Workflow仍在运行,等待30秒后重试..."
              sleep 30
            fi
          done
          
      # 这里放你实际要执行的任务步骤
      - name: 执行核心任务
        run: |
          echo "开始执行核心任务..."
          # 你的任务命令

3. 关键说明

  • GITHUB_TOKEN:GitHub自动提供的令牌,无需手动创建,只要配置了正确的权限就能使用
  • 循环间隔:示例中用30秒,可根据实际需求调整
  • 状态过滤:API查询时只筛选in_progress状态的运行,确保只等待未完成的任务
  • 排除当前运行:通过CURRENT_RUN_ID避免等待自身

注意事项

  • 确保运行环境安装了jq(Ubuntu-latest镜像默认已包含)
  • 如果Workflow名称包含特殊字符,需要对WORKFLOW_NAME进行URL编码
  • 若仓库为私有,权限配置需确保actions: read权限生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:10:31