同一GitLab项目配置两个CI Runner仅触发一个的问题
解决GitLab CI仅触发单个Runner的问题
听起来你遇到的是GitLab CI Runner触发逻辑不符合预期的问题——明明配置了OSX和Windows两个Runner,却每次只有一个执行任务,得禁用一个另一个才会启动。这通常是标签匹配或者CI配置文件的问题,咱们一步步来排查解决:
1. 检查Runner的标签配置
先去项目的CI/CD设置里查看两个Runner的标签:
- 确保OSX Runner带有
osx/macos这类专属标签 - Windows Runner带有
windows专属标签
如果两个Runner的标签完全重复(或者都没设置标签),GitLab会随机挑选一个Runner执行任务,这就会出现你说的“仅触发一个”的情况。
2. 修改.gitlab-ci.yml配置,让Job同时触发多平台Runner
你的CI配置文件需要明确指定对应平台的Job,才能让两个Runner同时工作,这里提供两种常见的配置方式:
方式一:拆分多平台独立Job
stages: - build # 触发OSX Runner的Job build-osx: stage: build tags: - osx # 匹配OSX Runner的标签 script: - 你的OSX编译命令 # 触发Windows Runner的Job build-windows: stage: build tags: - windows # 匹配Windows Runner的标签 script: - 你的Windows编译命令
推送代码后,两个Job会分别触发对应的Runner,实现并行执行。
方式二:用矩阵并行简化配置(适合编译逻辑相近的场景)
如果两个平台的编译命令差异不大,可以用变量+并行矩阵来简化配置:
stages: - build build: stage: build parallel: matrix: - RUNNER_TAG: osx BUILD_CMD: "make build-osx" - RUNNER_TAG: windows BUILD_CMD: "build.bat" tags: - $RUNNER_TAG script: - $BUILD_CMD
这种方式也能让两个Runner同时启动对应任务。
3. 检查Runner的项目锁定与未标记任务设置
确认两个Runner的配置:
- 都设置为锁定到当前项目(Runner设置里的「Locked」选项),避免被其他项目占用
- 不要同时开启「Run untagged jobs」,如果你的Job没指定标签,GitLab会优先选择第一个可用的未标记Runner,导致只有一个触发
4. 确认Runner的并发数配置
每个Runner的config.toml文件里有concurrent参数,默认值为1,代表该Runner同一时间只能执行一个Job。这个参数不影响两个不同Runner的并行触发,但确保两个Runner的concurrent值至少为1(默认就是)即可。
按照上面的步骤排查调整,大概率是标签匹配或者CI配置未指定多平台Job的问题,调整后应该就能同时触发两个Runner了。
内容的提问来源于stack exchange,提问作者Martin Delille
相关产品推荐
相关产品推荐

