私有化部署 GitLab Runner:5 步让 CI/CD 流水线跑在自家服务器上


阿里云推广

私有化部署 GitLab Runner:5 步让 CI/CD 流水线跑在自家服务器上

用了 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:

1. 准备服务器 — 2C4G 起步

2. 安装 Runner — 一行命令搞定

3. 注册到 GitLab — 填 URL + Token

4. 配置 Docker 执行器 — 加速 + 缓存

5. 验证流水线 — 提交代码看绿灯

从今天起,CI/CD 不再排队,分钟数不再焦虑。


👤 作者简介

一枚在大中原腹地(河南)卖公有云的从业者,主营腾讯云/阿里云/火山云,曾踩坑无数,现专注AI大模型应用落地。关注公众号「公有云cloud」,围观AI前沿动态~

博客:yunduancloud.icu

发表评论