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

如何在GitHub Actions中实现自托管Runner故障转移运行序列?

解决方案

要实现指定Runner优先执行、故障时自动切换到备用Runner的需求,你可以通过拆分作业+依赖判断的方式实现,具体配置如下:

核心思路

将任务拆分为两个顺序执行的作业:

  1. 第一个作业仅在runner-01上运行目标任务
  2. 第二个作业仅在第一个作业失败/Runner断开导致任务终止时,在runner-02上接管执行

GitHub Actions 配置示例

name: Long-running Task with Runner Fallback

jobs:
  run-on-primary-runner:
    name: Execute task on runner-01
    runs-on: [self-hosted, runner-01]
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      
      - name: Run long-running task
        run: |
          # 替换为你的长时间任务命令
          ./your-long-running-script.sh

  run-on-fallback-runner:
    name: Fallback to runner-02 if primary fails
    needs: run-on-primary-runner
    # 触发条件:主作业失败/被取消(Runner断开会导致作业被标记为cancelled)
    if: ${{ needs.run-on-primary-runner.result == 'failure' || needs.run-on-primary-runner.result == 'cancelled' }}
    runs-on: [self-hosted, runner-02]
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      
      - name: Run long-running task (fallback)
        run: |
          # 与主作业相同的任务命令
          ./your-long-running-script.sh

关键说明

  • 关于runs-on的逻辑:你之前使用的[self-hosted, runner-01, runner-02]是标签交集筛选,要求Runner同时拥有这三个标签才会被选中,并非你需要的 fallback 逻辑。
  • 顺序执行保障:通过needs字段让备用作业依赖主作业,只有主作业执行完成后,备用作业才会根据条件判断是否启动。
  • 故障覆盖场景:if条件同时包含failure(任务执行失败)和cancelled(Runner断开连接导致任务终止)两种情况,确保所有异常场景都能触发备用Runner。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:32:31