用了 3 年 GitLab SaaS,每月 CI 分钟数不够用?流水线排队等半天?这篇文章手把手教你在自家云服务器上部署 GitLab Runner,从此 CI/CD 不再受限。
为什么需要私有化部署 GitLab Runner?
用 GitLab 的同学都知道,SaaS 版免费额度只有 400 分钟/月。项目一多,月中就见底了,后面的提交只能排队等共享 Runner——慢得要命。
| 对比项 | GitLab SaaS 共享 Runner | 私有化 GitLab Runner |
|---|---|---|
| CI 分钟数 | 400 分钟/月(免费版) | 无限制 |
| 执行速度 | 排队等待,不可控 | 独占资源,秒级启动 |
| 定制环境 | 仅支持预置镜像 | 自由安装任意依赖 |
| 数据安全 | 代码在第三方执行 | 代码留在自家服务器 |
| 成本 | 超出后 $0.007/分钟 | 服务器固定费用 |
一句话总结:跑得快、不限时、数据不出门。
第 1 步:准备云服务器
推荐配置:
| 规模 | CPU | 内存 | 磁盘 | 参考月费 |
|---|---|---|---|---|
| 个人/小团队 | 2 核 | 4 GB | 50 GB SSD | ¥60-80 |
| 中型团队 | 4 核 | 8 GB | 100 GB SSD | ¥120-160 |
| 大型团队 | 8 核 | 16 GB | 200 GB SSD | ¥240-300 |
腾讯云轻量应用服务器 2C4G 套餐就够个人和小团队用了。
第 2 步:安装 GitLab Runner
以 Ubuntu 22.04 为例:
# 添加 GitLab 官方仓库
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
# 安装 GitLab Runner
sudo apt-get install gitlab-runner -y
# 验证安装
gitlab-runner --version
如果你用的是 CentOS:
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
sudo yum install gitlab-runner -y
Docker 方式也可以(适合不想污染宿主机的场景):
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
第 3 步:注册 Runner 到 GitLab
这是最关键的一步。打开 GitLab 项目 → Settings → CI/CD → Runners → 展开,找到注册令牌。
sudo gitlab-runner register
交互式输入:
Enter the GitLab instance URL:
> https://gitlab.com # 自建 GitLab 填你的域名
Enter the registration token:
> xxxxxxxxxxxxxxxx # 从 GitLab 页面复制的 token
Enter a description for the runner:
> my-private-runner # 给 Runner 起个名字
Enter tags for the runner (comma-separated):
> docker,linux,prod # 标签,.gitlab-ci.yml 会用到
Enter optional maintenance note for the runner:
> 腾讯云轻量2C4G
Enter an executor: ssh, docker+machine, docker-ssh, shell, virtualbox, docker, docker-ssh+machine, kubernetes, custom:
> docker # 推荐 docker 执行器
Enter the default Docker image:
> python:3.12-slim # 默认镜像
注册成功后确认状态:
sudo gitlab-runner status
sudo gitlab-runner list
第 4 步:配置 Docker 执行器
编辑配置文件,让 Runner 支持缓存和自定义镜像:
sudo vim /etc/gitlab-runner/config.toml
关键配置项:
[[runners]]
name = "my-private-runner"
url = "https://gitlab.com"
token = "你的token"
executor = "docker"
[runners.docker]
image = "python:3.12-slim"
privileged = true # 需要构建 Docker 镜像时开启
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
pull_policy = ["if-not-present"] # 优先用本地镜像,加速构建
[runners.cache]
Type = "s3"
Shared = true
[runners.cache.s3]
ServerAddress = "cos.ap-guangzhou.myqcloud.com" # 用 COS 做缓存
BucketName = "your-cache-bucket"
AccessKey = "your-access-key"
SecretKey = "your-secret-key"
重启生效:
sudo gitlab-runner restart
第 5 步:编写 .gitlab-ci.yml 验证
创建一个测试流水线,验证 Runner 是否正常工作:
# .gitlab-ci.yml
stages:
- test
- build
- deploy
variables:
DOCKER_TLS_CERTDIR: ""
test:
stage: test
tags:
- docker # 匹配 Runner 的标签
image: python:3.12-slim
script:
- pip install pytest
- pytest tests/ -v
cache:
key: ${CI_COMMIT_REF_NAME}
paths:
- .pip_cache/
build:
stage: build
tags:
- docker
image: docker:24
services:
- docker:24-dind
script:
- docker build -t myapp:$CI_COMMIT_SHORT_SHA .
- docker save myapp:$CI_COMMIT_SHORT_SHA > app.tar
artifacts:
paths:
- app.tar
expire_in: 1 day
deploy:
stage: deploy
tags:
- docker
image: alpine:3.19
script:
- echo "Deploying $CI_COMMIT_SHORT_SHA to production"
- scp app.tar user@your-server:/opt/app/
only:
- main
提交代码后,打开 GitLab → CI/CD → Pipelines,看到绿色 ✅ 就成功了!
常见问题速查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Runner 不执行任务 | 标签不匹配 | 检查 job tags 和 Runner tags |
| Docker 构建失败 | 未开启 privileged | config.toml 设置 privileged = true |
| 镜像拉取超时 | 国内网络 | 配置镜像加速器或 pull_policy = "if-not-present" |
| 磁盘满 | 构建缓存堆积 | 添加 cron 定时清理 /cache |
| 权限不足 | runner 用户无 docker 权限 | sudo usermod -aG docker gitlab-runner |
自动清理脚本(加到 crontab,每天凌晨跑一次):
#!/bin/bash
# /opt/scripts/clean-runner.sh
docker system prune -af --volumes --filter "until=72h"
find /cache -type f -mtime +7 -delete
echo "$(date): Cleanup done" >> /var/log/runner-cleanup.log
# 添加定时任务
sudo crontab -e
# 加入这一行
0 2 * * * /opt/scripts/clean-runner.sh
成本估算
以腾讯云轻量应用服务器 2C4G(¥68/月)为例:
| 项目 | 费用 |
|---|---|
| 云服务器 | ¥68/月 |
| 对象存储(缓存) | ¥1-5/月 |
| 合计 | ¥69-73/月 |
对比 GitLab SaaS 超出部分 $0.007/分钟(约 ¥0.05/分钟),每月跑 2000 分钟就要 ¥100,自己部署反而更便宜。
小结
5 步搞定私有化 GitLab Runner:
- 准备服务器 — 2C4G 起步
- 安装 Runner — 一行命令搞定
- 注册到 GitLab — 填 URL + Token
- 配置 Docker 执行器 — 加速 + 缓存
- 验证流水线 — 提交代码看绿灯
从今天起,CI/CD 不再排队,分钟数不再焦虑。
👤 作者简介
一枚在大中原腹地(河南)卖公有云的从业者,主营腾讯云/阿里云/华为云,曾踩坑无数,现专注AI大模型应用落地。关注公众号「公有云cloud」,围观AI前沿动态~
博客:yunduancloud.icu