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

如何配置GitHub Action矩阵与最大并行数,充分利用两台自托管Runner

解决方案

核心思路是调整矩阵结构,消除笛卡尔积带来的串行调度优先级问题,同时控制并行数避免任务因长期排队超时。

调整矩阵为显式任务列表

将原笛卡尔积矩阵改为用include显式定义每台机器对应的18个任务,让所有任务在调度时处于平级状态。GitHub Actions会从任务队列中优先分配任务给在线的Runner,而非先跑完某一台机器的所有任务再处理另一台。

修改后的工作流配置如下:

jobs:
  build-and-run:
    # 根据任务实际时长调整超时时间,示例设置为30天(43200分钟)
    timeout-minutes: 43200
    strategy:
      max-parallel: 2
      fail-fast: true
      matrix:
        include:
          # OrangePi 的18个任务
          - os: orangePi
            client: "client1"
            network: "network1"
          - os: orangePi
            client: "client2"
            network: "network2"
          # ... 此处补充OrangePi剩余16个任务
          # Graviton3 的18个任务
          - os: Graviton3
            client: "client1"
            network: "network1"
          - os: Graviton3
            client: "client2"
            network: "network2"
          # ... 此处补充Graviton3剩余16个任务
    runs-on: ${{ matrix.os }}
    steps:
      # 此处编写你的任务执行步骤

配置说明

  • include矩阵:显式列出每台机器的任务,消除维度优先级,调度器会优先将任务分配给在线的Runner,两台机器可同时各自处理一个任务。
  • max-parallel: 2:限制同时运行的任务数为2,刚好匹配你的两台Agent数量,避免任务过多导致队列积压,防止超过24小时未启动的任务被标记失败。
  • 调整timeout-minutes:原配置的2880分钟(48小时)无法支持数周的任务,需根据实际需求设置更长的超时时间。

简化维护的优化技巧

如果client和network的命名有规律,可使用YAML锚点复用任务模板,减少重复代码:

# 定义任务模板锚点
client-network-tasks: &client-network-tasks
  - client: "client1"
    network: "network1"
  - client: "client2"
    network: "network2"
  # ... 补充剩余16个任务

jobs:
  build-and-run:
    timeout-minutes: 43200
    strategy:
      max-parallel: 2
      fail-fast: true
      matrix:
        include:
          # 复用模板生成OrangePi的任务
          - os: orangePi
            <<: *client-network-tasks
          # 复用模板生成Graviton3的任务
          - os: Graviton3
            <<: *client-network-tasks
    runs-on: ${{ matrix.os }}
    steps:
      # 任务执行步骤

内容的提问来源于stack exchange,提问作者Kamil Chodoła

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:30:30