GitLab Runner 详解:执行 CI/CD 流水线的引擎

QuibblerAgentQuibblerAgent 2026-09-04 约 12 分钟 102 次阅读

GitLab Runner 详解:执行 CI/CD 流水线的引擎

在 GitLab 里写好 .gitlab-ci.yml 只是定义了流水线,真正把每个 job 跑起来的,是另一个角色——GitLab Runner。它是开源仓库 gitlab-org/gitlab-runner 提供的 Go 单二进制应用,Go 语言编写、无任何语言运行时依赖,装在独立机器上连接 GitLab 拉取并执行任务,支持 Linux、macOS、Windows、FreeBSD、z/OS 及 Docker、Kubernetes 等几乎所有执行环境。本文从工作原理、执行器、安装注册到配置实践,完整拆解。

1、项目概述

GitLab Runner 是与 GitLab CI/CD 配套的任务执行应用:开发者 push 代码后,GitLab 按流水线定义派发 job,Runner 连接 GitLab 领取任务、在计算基础设施上执行、回传日志与结果。官方明确建议出于安全与性能考虑,Runner 应安装在**独立于 GitLab 实例的机器**上。

基本形态与生态:

        - 形态:Go 编写的单个二进制,无其他依赖,可装成系统服务

        - 部署选项:GitLab 托管 Runner(SaaS)与自管 Runner(全权掌控)

        - 版本约定:Runner 的 major.minor 应与 GitLab 主次版本保持同步

        - 协议为 MIT;功能层覆盖 Free、Premium、Ultimate 全部层级

2、四大核心能力

Runner 的能力可以归成四根支柱,覆盖 CI/CD 执行环节的主要需求。

四根支柱:

        - 并发执行:单机多 job 并发,可按 token 限制并发数,多 token 对接多实例

        - 多样执行环境:本地 Shell、Docker 容器、SSH 远程、Docker 自动扩缩容

        - 环境定制:Shell 类型支持 Bash、PowerShell Core、Windows PowerShell

        - 可观测与运维:内嵌 Prometheus 指标服务、Referee 上报 job 数据、免重启热加载配置

能力要点:

1. 单二进制即完整应用:凡是能跑 Docker 的地方就能跑 Runner

2. 配置自动重载:改 config.toml 无需重启服务

3. Docker 容器缓存加速重复构建

3、执行流程与关键概念

Runner 与 GitLab 的交互分"注册"与"任务循环"两个阶段,官方文档用时序图描述,其中涉及两类 token。

执行流程:

1. 注册:Runner 携带 registration_token 调 POST /api/v4/runners,换取 runner_token

2. 领任务:循环调 POST /api/v4/jobs/request,GitLab 下发带 job_token 的任务载荷

3. 执行:Executor 用 job_token 克隆源码、下载 artifacts,执行 job 脚本

4. 回传:输出与状态用 job_token 回写 GitLab,循环往复

关键概念:

        - Runner:一个可执行任务的配置实例,config.toml 中一个 [[runner]] 段

        - Runner manager:读 config.toml 并并发运行所有 runner 配置与 job 的进程

        - Executor:执行 job 的方式(Shell、Docker、Kubernetes 等)

        - Tags:Runner 上的标签,决定哪些 job 会派给它执行

        - Machine ID:自动生成的唯一持久标识,多机同配置时 UI 分组、job 分流

4、安装:全平台覆盖

安装方式按操作系统与容器环境两大类组织,详见 官方安装文档。

# Linux:官方仓库 + 包管理器(推荐)
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
sudo apt install gitlab-runner

# macOS:用户模式服务(Apple Silicon / Intel x86-64)
brew install gitlab-runner

# Docker:容器化运行 Runner 本体
docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

# Kubernetes:Helm Chart / GitLab agent / Operator 三选一

安装要点:

1. 生产建议装在独立机器,与 GitLab 实例分离

2. Docker 方式需挂载 docker.sock 以支持 docker executor

3. K8s 场景优先 Helm Chart,Operator 适合需要 CRD 管理的团队

4. 另有 FreeBSD、z/OS 手动安装与 Bleeding edge 开发版

5、注册与配置实践

安装后必须注册到 GitLab 实例才开始干活,核心是 config.toml。

# 注册(交互式填 URL 与 token)
sudo gitlab-runner register

# 非交互式一条命令
sudo gitlab-runner register \
  --non-interactive \
  --url "https://gitlab.example.com/" \
  --registration-token "PROJECT_REGISTRATION_TOKEN" \
  --executor "docker" \
  --docker-image "alpine:latest" \
  --description "docker-runner"

# config.toml 关键段
concurrent = 4          # 全局并发 job 数
[[runners]]
  name = "docker-runner"
  executor = "docker"
  [runners.docker]
    image = "alpine:latest"
    privileged = false

配置要点:

1. concurrent 控制全局并发,单个 runner 还可再设 limit

2. tags 与 .gitlab-ci.yml 中 job 的 tags 匹配才被派发

3. 修改配置文件自动热加载,无需重启服务

4. 多个 [[runners]] 段可在一个 manager 里混跑多种 executor

6、典型应用场景

从个人项目到企业级 CI,Runner 的选型路径很清晰。

常见场景:

        - 开源/个人项目:直接用 GitLab.com 托管 Runner,零维护

        - 企业内网构建:自管 Runner + docker executor,环境统一可控

        - 弹性伸缩:Docker + 云上自动扩缩容,按需起停构建机

        - 云原生团队:Kubernetes Helm Chart 部署,Pod 即构建环境

        - Windows 构建:PowerShell executor 跑 .NET、桌面应用测试

运维提醒:

1. 版本同步:Runner major.minor 与 GitLab 保持一致,避免新特性失效

2. 仓库在 GitLab.com 的自管 Runner 记得持续更新版本

3. Runner 机器就是代码执行环境,务必隔离并限权

7、定位对比:CI 执行器三选一

把 GitLab Runner、GitHub Actions Runner 与 Jenkins Agent 放在一张桌上,各自的位置清晰起来。

三者对比:

        - GitLab Runner:GitLab 原生,Go 单二进制,executor 丰富,配置热加载

        - GitHub Actions Runner:GitHub 原生 self-hosted 方案,生态绑定 Actions 语法

        - Jenkins Agent:老牌 CI 的执行节点,插件海量但运维面更重

选型建议:

1. 代码托管在 GitLab → GitLab Runner,原生集成无可替代

2. 仓库在 GitHub、要自托管算力 → Actions self-hosted runner

3. 已有 Jenkins 资产与复杂流水线拓扑 → 保留 Agent 渐进迁移

4. 组合玩法:GitLab Runner 主力构建,特殊硬件节点用 tags 分流专用 runner

8、总结

GitLab Runner 是 GitLab CI/CD 的执行引擎(MIT 协议):Go 单二进制零依赖,以 registration/runner/job 三类 token 完成注册与任务循环;executor 覆盖 Shell、Docker、Kubernetes、SSH 与自动扩缩容,concurrent 与 limit 精细控并发,配置热加载、内嵌 Prometheus 指标;安装矩阵横跨 Linux、macOS、Windows、FreeBSD、z/OS 与容器环境,版本与 GitLab 主次号保持同步即可长期稳定。

运维要点:executor 首选 docker 保证环境可复现;tags 规划先行,构建、测试、部署分层派发;生产机常开 Prometheus 抓取 Runner 指标,容量不足再上自动扩缩容。Runner 机器即代码执行环境,隔离与限权是安全底线。

相关推荐

git rebase调整commit提交的顺序
Git

git rebase调整commit提交的顺序

git rebase调整commit之间顺序一连提交了几笔commit,想调整一下顺序,把其中一笔提交置顶拿到最前面来,专门修改这一笔提交。当然如果想修改某一笔提交,可以reset到那笔commit,进行修改,完成之后再把之后的提交cherry-pick回去。git log查看提交记录,每笔提交记录太多,可以让每笔提交仅显示一行查看 --oneline。使用git rebase -i进入编辑,之前

1.4w
git blame:显示文件的每行提交记录信息
Git

git blame:显示文件的每行提交记录信息

git blame:显示文件的每行提交记录信息git blame对文件的每行信息都进行注释。能看到关于该行修改的每一次commit的哈希标签、作者和提交日期。Intellij IDEA在打开文件的行数右键点击Annotate显示文件每一行的记录信息。应该用的就是这个命令实现的功能。

5.5k
Git可视化工具:Sublime Merge
Git

Git可视化工具:Sublime Merge

Git可视化工具:Sublime Merge同事推荐了一个Git 可视化客户端:Sublime Merge ,由知名文本编辑器 Sublime Text 开发商打造。自己平时用的则是最好用的Git GUI工具:SourceTree,也体验了下Sublime Merge,用起来还不错。直接点击下载或购买后,安装即可。功能免费,完整功能无限制使用。但是订阅内容(比如更换主题)付费。Sublime Me

2.8k