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

如何在GitHub Actions自托管运行器上同时运行多个工作流

如何在GitHub Actions自托管运行器上同时运行多个工作流

嘿,我完全懂你的困扰——用自托管runner的时候,多个工作流排着队等前面的跑完,确实太耽误时间了!其实这个问题的核心是自托管runner默认的并发限制,咱们一步步来解决:

问题根源

默认情况下,每个自托管runner一次只能处理1个Job,所以当多个工作流(或者同一个工作流的多个Job)触发时,它们会按顺序排队执行。和GitHub托管的runner不同,自托管runner的并发能力完全由你自己配置。

解决方法

1. 调整现有runner的并发数

如果你的服务器CPU、内存资源足够支撑多个Job并行,可以直接修改runner的配置文件,让它同时处理多个任务:

  • 找到自托管runner安装目录下的 config.toml 文件(一般在actions-runner文件夹里)
  • 找到 concurrent 字段,默认值是1,改成你想要的并发数(比如2或3,具体看服务器性能):
    concurrent = 2
    
  • 重启runner服务:
    • Linux/macOS:运行 ./svc.sh restart
    • Windows:在系统服务列表里找到GitHub Actions Runner,右键选择重启

⚠️ 注意:你的Job里用到了MySQL、Redis容器和Ruby环境,并行运行时要确保服务器有足够的硬件资源,不然可能出现任务变慢、容器启动失败的情况。

2. 添加多个自托管runner实例

如果单runner改并发后资源还是不够,或者担心多个Job互相影响,你可以在同一台服务器(或者多台服务器)上部署多个独立的runner实例:

  • 打开仓库的「Settings」→「Actions」→「Runners」,点击「New self-hosted runner」
  • 重复官方的安装配置步骤,每个实例使用不同的工作目录(比如actions-runner-1、actions-runner-2),或者给它们设置不同的标签(比如self-hosted-test-1)
  • 这样每个runner实例都能独立处理一个Job,多个工作流就能同时运行了

3. 检查工作流的runs-on配置

确保你的工作流里的runs-on: self-hosted能匹配到多个runner(或者开启了并发的单个runner)。如果给runner加了自定义标签,记得在工作流里对应写上,比如:

runs-on: [self-hosted, linux]

这样所有带有self-hosted和linux标签的runner都会被用来执行任务。

额外提醒

  • 如果你用的是Docker容器型的自托管runner,还要注意Docker本身的资源限制,避免容器之间抢占资源
  • 可以先从小的并发数开始测试,比如先设为2,观察服务器负载和任务执行情况,再调整到合适的数值

备注:内容来源于stack exchange,提问作者Thiago David

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:09:34