GitLab 进阶:配置 CI/CD 的 Runners 环境
从 Jenkins 到 GitLab CI/CD
学完 Jenkins 之后,我们已经掌握了 CI/CD 的核心流程:安装依赖 -> 构建打包 -> 推送制品 -> 部署。Jenkins 虽然功能完善、生态丰富,但配置复杂、学习曲线陡峭,还需要掌握服务器运维知识。
GitLab CI/CD 是 GitLab 内置的持续集成/持续部署方案,相比 Jenkins 有以下优势:
| 特性 | Jenkins | GitLab CI/CD |
|---|---|---|
| 配置方式 | 图形化界面 + Jenkinsfile | YAML 配置文件 (.gitlab-ci.yml) |
| 版本管理 | 需额外配置 | 配置文件随代码仓库管理 |
| Runner 管理 | 手动配置节点 | 支持共享/组/项目级 Runner |
| 平台支持 | 需自行搭建 | 原生支持 Linux/macOS/Windows 矩阵构建 |
| 上手难度 | 较高 | 相对较低 |
GitLab CI/CD 的前置条件只有两步:
- 确保有可用的 Runner(工作节点)
- 创建 .gitlab-ci.yml 配置文件
Runner 类型与架构
Runner 分类
| 类型 | 适用场景 | 说明 |
|---|---|---|
| Shared Runner | 全局共享 | 管理员在 Admin Area 中配置,所有项目可用 |
| Group Runner | 组内共享 | 在 Group 设置中配置,组内所有项目可用 |
| Project Runner | 项目专属 | 在项目设置中配置,仅该项目可用 |
Executor 对比
GitLab Runner 支持多种执行器,选择合适的 Executor 是关键:
| Executor | 构建隔离 | 性能 | 推荐场景 |
|---|---|---|---|
| docker | 高 | 好 | 推荐,环境干净、功能全面 |
| shell | 无 | 最好 | 简单项目,不需要隔离 |
| virtualbox | 高 | 一般 | 需要 Windows 环境 |
| docker-windows | 高 | 好 | Windows 容器构建 |
| kubernetes | 高 | 好 | K8s 集群环境 |
| ssh | 中 | 一般 | 远程服务器执行 |
推荐选择 Docker Executor:功能最全面,环境隔离好,便于复现构建环境。
安装 GitLab Runner(Linux)
1. 下载安装
以 CentOS/RHEL 为例:
# 下载 GitLab Runner 二进制文件(x86_64)
sudo curl -L --output /usr/local/bin/gitlab-runner \
https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# ARM 架构(如 Apple Silicon、ARM 服务器)
# sudo curl -L --output /usr/local/bin/gitlab-runner \
# https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm64
# 赋予执行权限
sudo chmod +x /usr/local/bin/gitlab-runner
# 创建 gitlab-runner 用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
bash
2. 安装为系统服务
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
bash
3. 查看服务状态
sudo gitlab-runner status
sudo gitlab-runner verify
bash
注册 Runner
在 GitLab 管理中心创建 Runner
- 进入 Admin Area > CI/CD > Runners
- 点击 Create new runner
- 选择平台(Linux/macOS/Windows)
- 配置参数:
- Tag:为 Runner 打标签(如
dev、production),便于在 CI 配置中指定 - Maximum job timeout:最大作业超时时间(建议 3600 秒,即 1 小时)
- Description:可选的描述信息
- Tag:为 Runner 打标签(如
执行注册命令
在服务器终端执行注册命令(从 GitLab 界面复制):
sudo gitlab-runner register \
--url http://your-gitlab-domain/ \
--token glrt-xxxxxxxxxxxxxxx
bash
注册过程中的交互式配置:
# 输入 GitLab 实例 URL
Enter the GitLab instance URL (for example, https://gitlab.com/):
> http://192.168.3.177/
# 输入 Runner 名称
Enter a name for the runner:
> dev-runner
# 选择 Executor
Enter an executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, shell, virtualbox, docker-ssh, custom:
> docker
# 输入默认 Docker 镜像
Enter the default Docker image (for example, ruby:2.7):
> debian:latest
text
注意:默认镜像建议使用
debian:latest或ubuntu:latest作为基础镜像,也可以根据项目需求自定义基础镜像。
Docker Executor 注册完整示例
sudo gitlab-runner register \
--non-interactive \
--url "http://your-gitlab-domain/" \
--token "glrt-xxxxxxxxxxxxxxx" \
--executor "docker" \
--docker-image "debian:latest" \
--description "docker-runner" \
--tag-list "dev,docker"
bash
验证 Runner 状态
注册完成后,回到 GitLab 管理中心 > CI/CD > Runners 页面,应该能看到 Runner 状态为 online(绿色圆点)。
Runner 配置文件
注册完成后,配置文件位于 /etc/gitlab-runner/config.toml:
# /etc/gitlab-runner/config.toml
[[runners]]
name = "dev-runner"
url = "http://192.168.3.177/"
token = "glrt-xxxxxxxxxxxxxxx"
executor = "docker"
[runners.docker]
tls_verify = false
image = "debian:latest"
privileged = false
disable_cache = false
volumes = ["/cache"]
toml
常见配置调整
[[runners]]
# ... 基本配置 ...
[runners.docker]
# 使用 Docker in Docker
image = "docker:24-cli"
privileged = true
volumes = [
"/var/run/docker.sock:/var/run/docker.sock",
"/cache"
]
# 并发配置
[runners.cache]
Type = "s3"
Shared = true
toml
常见问题排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Runner 显示 offline | 网络不通或服务未启动 | 检查 gitlab-runner status,确认网络连通性 |
| 下载安装包失败 | 网络限制 | 使用代理下载或离线安装 |
| 找不到 gitlab-runner 命令 | PATH 未配置 | 确认安装在 /usr/local/bin/ |
| 作业卡在 pending | 无可用 Runner | 检查 Runner 标签匹配和共享设置 |
| 版本不兼容 | GitLab 和 Runner 版本差异 | 升级 Runner 到与 GitLab 匹配的版本 |
总结
- GitLab CI/CD 相比 Jenkins 配置更简洁,配置文件随代码仓库管理
- Runner 是执行 CI/CD 作业的工作节点,推荐使用 Docker Executor
- 安装流程:下载二进制文件 -> 安装服务 -> 注册 Runner -> 验证在线状态
- Runner 版本需与 GitLab 版本保持兼容,建议及时升级
↑