如何在.gitlab-ci.yml文件中排除指定Runner处理作业
Solution to Exclude Specific Runners for GitLab CI Job
直接来说,GitLab CI 本身没有提供直接的「排除指定 Runner」的配置项,但我们可以利用预定义变量和规则(rules)来实现你想要的效果——让作业仅被无标签的 Runner C、D 处理,同时排除有标签的 A、B。
Step-by-Step Implementation
假设 Runner A 的标签是 runner-a,Runner B 的标签是 runner-b(请替换成你实际给这两个 Runner 设置的标签名称),你可以修改 build 作业的配置如下:
build: image: nexus.ngidev.com:5000/system/jdk8 stage: build script: - mvn clean package artifacts: paths: - target/*.jar - target/lib rules: # 排除带有 runner-a 或 runner-b 标签的 Runner - if: '$RUNNER_TAGS =~ /runner-a|runner-b/' when: never # 允许其他所有 Runner 执行该作业 - when: always
How It Works
$RUNNER_TAGS是 GitLab CI 的预定义变量,它以逗号分隔的字符串形式存储当前 Runner 的所有标签。- 正则表达式
/runner-a|runner-b/会匹配任何包含runner-a或runner-b标签的 Runner,规则里的when: never会让这类 Runner 直接跳过该作业。 - 最后一条规则
when: always确保没有上述标签的 Runner(也就是你的 C、D)可以正常接收并随机执行该作业,完全符合你「随机选择可用 Runner 但排除 A、B」的需求。
Notes
- 请务必将
runner-a和runner-b替换为你实际给 Runner A、B 设置的标签名称,否则规则不会生效。 - 如果后续你给 C、D 添加了标签,只要这些标签不在排除列表里,作业依然会正常分配给它们。
内容的提问来源于stack exchange,提问作者CAMD_3441
相关产品推荐
相关产品推荐

