如何在A.yml成功后延迟N分钟触发GitHub Workflow B.yml运行?
如何在GitHub Workflow A成功后延迟N分钟触发Workflow B
方法1:Repository Dispatch + 延迟任务(推荐)
在Workflow A的末尾新增一个使用廉价Ubuntu Runner的任务,先延迟指定时长,再通过repository_dispatch事件触发Workflow B,避免占用昂贵的macOS Runner等待。
Workflow A(A.yml)示例:
name: Build & Upload to TestFlight on: [push, pull_request] # 你的触发条件 jobs: build-upload: runs-on: macos-latest steps: # 这里是构建、上传到TestFlight的核心步骤 - name: Checkout code uses: actions/checkout@v4 # ... 其他构建、上传相关步骤 ... trigger-delayed-b: needs: build-upload # 仅在build-upload任务成功后运行 runs-on: ubuntu-latest # 用低成本Ubuntu Runner执行延迟和触发操作 steps: - name: Delay for N minutes run: sleep ${{ secrets.DELAY_MINUTES }}m # 建议在仓库Secrets中设置DELAY_MINUTES,值为5或10等需求时长 - name: Trigger Workflow B uses: peter-evans/repository-dispatch@v2 with: token: ${{ secrets.GITHUB_TOKEN }} event-type: trigger-workflow-b # 自定义事件类型,需与B.yml中的监听类型一致
Workflow B(B.yml)示例:
name: Submit to External Testers on: repository_dispatch: types: [trigger-workflow-b] # 监听A发送的触发事件 jobs: submit-for-review: runs-on: macos-latest steps: # 这里是提交到外部测试人员的核心步骤 - name: Checkout code uses: actions/checkout@v4 # ... 其他与App Store Connect交互、提交审核的步骤 ...
方法2:原生GitHub API调用(无第三方Action依赖)
若不想依赖第三方Action,可直接用curl调用GitHub API发送repository_dispatch事件,替换方法1中的Trigger Workflow B步骤:
- name: Trigger Workflow B via GitHub API run: | curl -X POST \ -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ -H "Accept: application/vnd.github.v3+json" \ ${{ github.api_url }}/repos/${{ github.repository }}/dispatches \ -d '{"event_type": "trigger-workflow-b"}'
注意事项
- 延迟时间设置:建议将延迟时长设为ASC显示构建内容的平均时长+1-2分钟,预留调度缓冲,避免B运行时ASC未同步完成。
- 成本优化:Ubuntu Runner费用远低于macOS Runner,用它执行延迟和触发操作能大幅节省开销。
- 权限验证:确保
GITHUB_TOKEN拥有仓库repo权限(默认已具备)。
内容的提问来源于stack exchange,提问作者andrei
相关产品推荐
相关产品推荐

