首页/开发/CI/CD 与发布速查/GitLab Runner 标签与调度
工具链要点63 条

GitLab Runner 标签与调度

作业通过 tags 选择 Runner:只有标签匹配的 Runner 才能接单;共享、群组、项目 Runner 与不同 executor(docker、shell、kubernetes)决定隔离与伸缩能力。

CI/CD 与发布速查开发更新于 2026-10-13

标签与调度是什么

GitLab Runner 用 tags 做作业调度:作业在配置文件里声明 tags 列表,只有注册时带齐这些标签的 Runner 才会接单,未匹配的作业一直停在 pending。Runner 分三类:共享(所有项目可用)、群组(群组内项目)、项目(仅一个项目),决定权限与复用范围;executor(docker、kubernetes、shell 等)决定隔离强度与弹性。给 Runner 打用途标签(docker、gpu、high-mem、ios)就把「作业去哪台机器跑」变成声明式调度:稀有资源只有声明需要的作业才排队。排查作业不动时,先看标签拼写与 Runner 在线状态,再看并发槽位。

基本信息

匹配作业 tags 必须是 Runner 标签的子集
类型共享 / 群组 / 项目级 Runner
executordocker、kubernetes、shell 等,隔离与启动成本不同
排查作业 pending 先查标签匹配与 Runner 在线
无标签作业Runner 默认不接(可开启运行)
shell 隔离直接在主机执行,只给可信项目

典型使用场景

  • 重型构建机:gpu、high-mem 标签把作业调度到专用机器,不挤占通用池。
  • 隔离生产凭据:项目级 Runner 专机专用,敏感变量不外泄到共享环境。
  • 弹性扩容:kubernetes executor 按需起 Pod,高峰自动排队扩容。
  • 混合平台:linux、windows、macos 标签区分构建平台。
  • 排查 pending:标签不匹配、Runner 离线、并发已满三类原因逐项排除。
  • 灰度新构建环境:部分 Runner 先打新标签接少量作业试跑。

声明与注册

声明与注册
build:
  tags: [docker, linux]  # 只有带这两个标签的 Runner 接单
  script: [make build]
# 注册 Runner 时声明标签:
# gitlab-runner register --tag-list docker,linux --executor docker

executor 对比

executor隔离弹性适用
docker容器级,中等按需起容器通用构建
kubernetesPod 级,较强自动扩缩云原生集群
shell无隔离,弱无可信环境的部署类任务
无标签作业默认不被接单:Runner 注册项里可配置是否运行无标签作业,团队规范要写清楚统一口径。
并发是每个 Runner 的设置:标签匹配但槽位占满,作业同样排队;扩容前先看并发上限与实际占用。
Runner 可设为 protected:只服务受保护分支或标签的作业,生产部署的接单范围因此收紧。

易错点

  • 标签拼写不一致(错别字、多余空格):作业永远 pending,核对注册标签与作业声明。
  • 共享 Runner 跑生产部署:凭据暴露面变大,部署作业放项目级或受保护 Runner。
  • 只加机器不调并发:设备变多但每台并发未放开,排队问题依旧。
  • shell executor 跑不可信代码:等于把主机权限交给作业,只给可信项目使用。
  • 标签体系无人治理:长期堆积无人接单的孤儿标签,定期清理 Runner 与标签。

数据来源与参考

  • GitLab Docs《Runner》
  • GitLab Docs《Tags》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌