GitLab Runner Shell执行器多服务器同时运行作业配置问题
问题
我在3台服务器上安装了GitLab Runner,将其配置为Shell执行器,这些Runner均为特定Runner而非共享Runner,未使用标签。我的需求是让.gitlab-ci.yml中的指令在3台服务器上同时执行,当前使用的模板yaml如下:
stages: - test test: stage: - hostname
但执行该yaml时,仅会在其中一台服务器上运行,再次触发Runner才会在另一台服务器执行。请问Shell执行器是否支持实现该需求?该如何配置?是否需要更换实现方式?
注:发布此问题后,我尝试了标签方法:注册Runner时为各服务器设置专属标签,并在gitlab-ci.yaml中使用这些标签指定作业运行目标。此方法虽能让作业在对应标签的服务器上运行,但无法实现同时执行,还会导致gitlab-ci.yaml中出现大量重复代码(因为我在各服务器上的操作大多相同)。
解决方案
Shell执行器完全支持你的需求,不需要更换执行器,以下是两种高效的配置方式:
方式一:统一标签+parallel关键字
- 给3台服务器上的Runner设置同一个标签(比如
shell-runner-cluster),确认它们都是目标项目的特定Runner且处于启用状态。 - 在
.gitlab-ci.yml中通过parallel指定并行数量,结合标签匹配这组Runner:
stages: - test test: stage: test tags: - shell-runner-cluster parallel: 3 script: - hostname
配置完成后,GitLab会自动在3台Runner上同时触发该作业,全程无需重复编写代码。
方式二:matrix参数批量生成并行作业
如果后续需要扩展服务器或做轻微差异化操作,可使用matrix参数定义服务器标识,搭配统一标签实现并行:
stages: - test test: stage: test tags: - shell-runner-cluster parallel: matrix: - SERVER: ["node-1", "node-2", "node-3"] script: - hostname # 若需要,可通过$SERVER变量执行差异化逻辑
这种方式同样能实现3台服务器同时执行作业,且配置简洁易维护。
关键配置检查
- 确保每台Runner的
config.toml中concurrent值至少为1,且没有被其他作业占用资源,保证能同时接收任务。 - 确认特定Runner仅关联目标项目,避免被其他项目占用导致并行失效。
内容的提问来源于stack exchange,提问作者G.Baysec
相关产品推荐
相关产品推荐

