Gitlab Runner 配置实践

在极狐 GitLab(或 GitLab)上跑 CI 任务时,可以用官方提供的 Runner,也可以在自己的服务器(这里是阿里云的 ECS) 上装自定义Runner,把任务放到自己机器上执行。

概念理解

GitLab CI Runner :用来执行 CI/CD 流水线里定义的 job 的程序。流水线触发后,由 Runner 拉取代码、按 .gitlab-ci.yml 里的步骤在指定环境里执行(如 build、test、deploy),可以理解成运行在服务器上的任务执行器。

Runner 与标签(tags) :一个 GitLab 项目/实例下可以有多个 Runner。在 CI 里通过 tags 指定用哪类 Runner 跑某个 job;只有「带对应 tag」的 Runner 会接这个 job。例如给自建 Runner 打上 nodedocker,在 job 里写 tags: [node] 就会用这台自建 Runner 跑。

Docker in Docker(DinD):在Docker容器内部运行Docker守护进程的方式,允许在单个容器中运行多个Docker服务,比如容器里运行在 CI job 里再跑 Docker(例如构建镜像)时,会用到 DinD 服务。

配置步骤

1. 安装启动 gitlab-runner

可用 uname -a 确认系统架构,使用不同的安装方法,在创建 runner 的时候可以找到具体配置方法,这里是以 CentOS7 为例:

bash 复制代码
# 下载极狐 GitLab 提供的 Runner 二进制(amd64)
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.gitlab.cn/latest/binaries/gitlab-runner-linux-amd64

# 赋予可执行权限
sudo chmod +x /usr/local/bin/gitlab-runner

# 创建专用系统用户
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

# 以 gitlab-runner 用户安装并启动服务
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

2. 创建自定义 Runner

在项目或群组/实例的 CI/CD → Runners 里新增 Runner,设置名称和要绑定的 tags (如 nodedocker

创建完成后页面上会给出 registration token ,后面 gitlab-runner register 会使用上。

自建 Runner 这里的标签(tag)按需填写,CI job 中只有配置符合的 tags 标签时才会使用对应的 Runner,后续也可以编辑。

3. 注册 Runner

在已安装 gitlab-runner 的 服务器上执行注册,按提示填写 runner 名称、url、选择执行器等。

bash 复制代码
# 交互式注册(将 <runner-token> 换成上一步拿到的 token)
gitlab-runner register \
  --url https://jihulab.com \
  --token <runner-token>

# 按提示:输入 Runner 描述名、选择 executor(如 docker)、默认镜像等
# 执行器类型可查:https://docs.gitlab.cn/docs/runner/executors/#compatibility-chart

# 注册完成后,可前台跑一次,确认能拉取到作业(调试用)
gitlab-runner run

4.确认 Runner 状态

CI/CD → Runners 里看该 Runner 是否显示为绿色在线。绿色表示已连上并可接收 job。

5. 使用 Runner

.gitlab-ci.yml 里给 job 加上 tags,即可让该 job 只由带对应 tag 的自建 Runner 执行。

yaml 复制代码
build-job:
  stage: build
  tags:
    - node   # 与自建 Runner 上配置的标签一致

问题踩坑

gitlab-runner 用户不在 Docker 组

按官方文档只做默认安装时,gitlab-runner 用户通常不在 docker 组里,用 Docker 执行器或在 job 里执行 docker 命令会权限不足。需要把该用户加入 docker 组并重新登录会话后重启服务。

bash 复制代码
# 将 gitlab-runner 加入 docker 组
sudo usermod -aG docker gitlab-runner

# 停止 Runner,以便后续用新组权限启动
sudo gitlab-runner stop

# 退出当前 SSH 会话再重连,或执行下面命令使组生效后再启动
exec su - $USER

# 重新启动 Runner
sudo gitlab-runner start

Docker 执行器 + DinD 的 TLS 端口不一致

使用 Docker 执行器且在 job 里需要构建镜像(会用到 DinD)时,阿里云等环境里 Docker 的 DinD 可能只监听 2376(TLS) ,而 GitLab CI 配置时默认连 2375(非 TLS),会导致 job 里连不上 DinD 服务。解决办法是在 Runner 配置里关闭 TLS 校验并清空 TLS 证书目录环境变量,并视情况加长等待时间。

编辑 /etc/gitlab-runner/config.toml,在对应 [[runners]] 下增加或修改如下(nameurlidtoken 等按实际填写):

toml 复制代码
[[runners]]
  name = "node_runner"
  url = "https://jihulab.com"
  id = 42515
  token = "xxxx"
  token_obtained_at = 2026-02-15T12:08:08Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  # 关闭 DinD 的 TLS,避免只开 2376 时连不上
  environment = ["DOCKER_TLS_CERTDIR="]
  [runners.cache]
    MaxUploadedArchiveSize = 0
  [runners.cache.s3]
  [runners.cache.gcs]
  [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "node:22"
    # DinD 场景下通常需要开启,非必要勿开,会有权限安全问题
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    # 网络或 DinD 启动慢时可适当加大
    wait_timeout = 60
    disable_cache = false

修改后执行 sudo gitlab-runner restart 使配置生效。

参考内容

相关推荐
智者知已应修善业2 小时前
【51单片机89C51及74LS273、74LS244组成】2022-5-28
c++·经验分享·笔记·算法·51单片机
奋斗的小乌龟2 小时前
langchain4j笔记-06
笔记
·醉挽清风·3 小时前
学习笔记—MySQL—库表操作
笔记·学习·mysql
白小沫4 小时前
TortoiseSVN是什么?
学习
weixin_451431564 小时前
【学习笔记】微博视频页面ajax请求与响应数据分析
笔记·学习·音视频
清辞8535 小时前
尾盘选股法程序开发学习初期
学习
Century_Dragon6 小时前
让实训“活”起来——信息化综合实训考核平台助力汽车专业教学
学习
快乐得小萝卜6 小时前
OpenVLA 论文精读笔记
笔记
kyriewen6 小时前
我让 AI 当了 24 小时全年无休的“毒舌考官”
前端·ci/cd·ai编程
nashane6 小时前
HarmonyOS 6学习:PanGesture手势驱动月亮半圆轨迹“滚动”术
学习·harmonyos 5