标签与调度是什么
GitLab Runner 用 tags 做作业调度:作业在配置文件里声明 tags 列表,只有注册时带齐这些标签的 Runner 才会接单,未匹配的作业一直停在 pending。Runner 分三类:共享(所有项目可用)、群组(群组内项目)、项目(仅一个项目),决定权限与复用范围;executor(docker、kubernetes、shell 等)决定隔离强度与弹性。给 Runner 打用途标签(docker、gpu、high-mem、ios)就把「作业去哪台机器跑」变成声明式调度:稀有资源只有声明需要的作业才排队。排查作业不动时,先看标签拼写与 Runner 在线状态,再看并发槽位。
基本信息
| 匹配 | 作业 tags 必须是 Runner 标签的子集 |
|---|---|
| 类型 | 共享 / 群组 / 项目级 Runner |
| executor | docker、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 dockerexecutor 对比
| executor | 隔离 | 弹性 | 适用 |
|---|---|---|---|
| docker | 容器级,中等 | 按需起容器 | 通用构建 |
| kubernetes | Pod 级,较强 | 自动扩缩 | 云原生集群 |
| shell | 无隔离,弱 | 无 | 可信环境的部署类任务 |
无标签作业默认不被接单:Runner 注册项里可配置是否运行无标签作业,团队规范要写清楚统一口径。
并发是每个 Runner 的设置:标签匹配但槽位占满,作业同样排队;扩容前先看并发上限与实际占用。
Runner 可设为 protected:只服务受保护分支或标签的作业,生产部署的接单范围因此收紧。