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

Ubuntu无交互环境下用GH CLI运行GitHub工作流并等待完成的咨询

无交互运行GitHub工作流并等待完成的实现方案

可行性说明

完全可行。GH CLI支持无交互触发工作流,且能通过命令查询运行状态,结合shell循环即可实现等待工作流完成后再执行后续命令。

实现步骤

  1. 无交互触发工作流:指定工作流文件和仓库(避免环境默认仓库不一致),触发时直接获取运行ID
  2. 轮询等待运行结束:通过运行ID循环查询工作流状态,直到状态变为completed(包含成功或失败)
  3. 根据结果执行后续命令:可选判断运行是否成功,再决定后续操作

完整cloud-init示例

#cloud-config
runcmd:
  - |
    # 触发Node.js CI工作流并获取运行ID
    RUN_ID=$(gh workflow run node.js.yml --repo <你的GitHub仓库名> --json databaseId --jq '.databaseId')
    echo "工作流已触发,运行ID: $RUN_ID"

    # 轮询等待工作流完成
    MAX_ATTEMPTS=60
    ATTEMPT=0
    while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
      RUN_STATUS=$(gh run view $RUN_ID --json status --jq '.status')
      echo "当前工作流状态: $RUN_STATUS"

      # 状态为completed时退出循环
      if [ "$RUN_STATUS" = "completed" ]; then
        break
      fi

      # 每30秒查询一次
      sleep 30
      ATTEMPT=$((ATTEMPT+1))
    done

    # 检查工作流最终结果
    if [ $ATTEMPT -ge $MAX_ATTEMPTS ]; then
      echo "工作流执行超时"
    else
      RUN_CONCLUSION=$(gh run view $RUN_ID --json conclusion --jq '.conclusion')
      if [ "$RUN_CONCLUSION" = "success" ]; then
        echo "工作流执行成功,开始后续命令..."
        # 此处添加后续需要执行的命令
        # 示例:echo "执行后续部署操作"
      else
        echo "工作流执行失败,结论: $RUN_CONCLUSION"
        # 可选添加失败处理逻辑
      fi
    fi

关键命令说明

  • gh workflow run node.js.yml --repo <仓库名>:无交互触发指定工作流
  • --json databaseId --jq '.databaseId':提取触发后的运行ID,用于后续状态查询
  • gh run view $RUN_ID --json status --jq '.status':查询工作流当前状态,常见值:queued、in_progress、completed
  • gh run view $RUN_ID --json conclusion --jq '.conclusion':查询工作流最终结果,成功为success,失败为failure等

注意事项

  • 确保EC2实例上的GH CLI已完成无交互认证(如通过环境变量GITHUB_TOKEN或提前配置好登录状态)
  • 确认GitHub仓库的self-hosted runner处于在线状态,否则工作流会一直处于排队状态
  • 可根据工作流实际运行时长调整轮询间隔(sleep的时间)和最大尝试次数(MAX_ATTEMPTS)

附原工作流代码

# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs

name: Node.js CI

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]
  workflow_dispatch:

jobs:
  build:

    runs-on: self-hosted

    strategy:
      matrix:
        node-version: [16.x]
        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/

    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
        token: ${{ secrets.TOKEN_NAME }}
    - run: npm ci
    - run: npm run build --if-present

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:01:16