如何在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,右键选择重启
- Linux/macOS:运行
⚠️ 注意:你的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
相关产品推荐
相关产品推荐

