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

为什么仅一台标记test标签的GitHub自托管运行器会接收新作业

问题核心原因

你对GitHub Actions的任务调度逻辑理解存在偏差:单个Job默认只会被分配到1台符合标签要求的runner上执行,不会自动下发到所有匹配标签的runner同时运行,这就是PC2始终闲置的根本原因,和标签配置无关。

另外你贴出的test.yml存在语法缩进错误,build属于jobs下的字段,你误将它写到了on触发条件的层级下,如果你实际运行正常大概率是粘贴时的格式问题,后续调整配置时注意缩进即可。

解决方案

不需要为每台PC单独创建工作流文件,使用GitHub Actions内置的矩阵策略就能实现所有匹配标签的runner并行执行任务,推荐两种实现方案:

方案一(稳定性最高)

  1. 先为每台self-hosted runner新增唯一标识标签:比如给PC1加pc1、PC2加pc2、PC3加pc3
  2. 调整工作流配置,新增runner矩阵,触发时会自动为矩阵内的每个值生成独立Job,分别调度到对应runner执行
    修正后的test.yml示例:
name: Test

on:
  # 推送到test分支时触发工作流
  push:
    branches: [ test ]
  # 允许在Actions标签页手动触发工作流
  workflow_dispatch:

jobs:
  build:
    runs-on: [self-hosted, test, ${{ matrix.runner_id }}]
    strategy:
      matrix:
        runner_id: [pc1, pc2] # 按你实际的test runner唯一标签填写
      max-parallel: 2 # 确保所有Job同时执行,数值和你的test runner数量一致
    steps:
      - uses: actions/checkout@v4 # 建议升级到更高版本,v2已停止维护
        with:
          ref: test
      
      - name: Pull, build, compose up
        run: |
          docker build -f Dockerfile -t test-1 .
          docker-compose up -d

后续如果新增test runner,只需要在runner_id数组里加对应标签即可,不需要修改其他配置。

方案二(无需新增标签)

如果不想给每台runner加独有标签,可以直接把矩阵设置为重复执行的实例数,只要对应标签的runner都在线空闲,就会自动分配到多台机器:

jobs:
  build:
    runs-on: [self-hosted, test]
    strategy:
      matrix:
        instance: [1, 2] # 数值数量和你的test runner数量一致
      max-parallel: 2
    steps:
      # 后续步骤和之前一致

这个方案的缺点是如果有一台runner离线,对应的Job会一直排队,不会自动调度到其他在线的test runner上,灵活性较差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:15:04