为什么仅一台标记test标签的GitHub自托管运行器会接收新作业
问题核心原因
你对GitHub Actions的任务调度逻辑理解存在偏差:单个Job默认只会被分配到1台符合标签要求的runner上执行,不会自动下发到所有匹配标签的runner同时运行,这就是PC2始终闲置的根本原因,和标签配置无关。
另外你贴出的test.yml存在语法缩进错误,build属于jobs下的字段,你误将它写到了on触发条件的层级下,如果你实际运行正常大概率是粘贴时的格式问题,后续调整配置时注意缩进即可。
解决方案
不需要为每台PC单独创建工作流文件,使用GitHub Actions内置的矩阵策略就能实现所有匹配标签的runner并行执行任务,推荐两种实现方案:
方案一(稳定性最高)
- 先为每台self-hosted runner新增唯一标识标签:比如给PC1加
pc1、PC2加pc2、PC3加pc3 - 调整工作流配置,新增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
相关产品推荐
相关产品推荐

