AI 摘要
在Rocky9上安装指定版本GitLab Runner,覆盖官方仓库配置、版本匹配、注册为shell/docker/kubenetes实例,并重点说明kubenetes场景的secret创建与helm部署,以及双侧重注销的正确方法。

官方文档

一、环境准备

需要 gitlab 版本保持一致。

1.1 介绍

代码集成。

1.2 规划

主机名 ip 系统版本 用途
gitlab-runner 192.168.10.15 Rocky9 gitlab-runner

二、安装

  1. 添加官方仓库
1
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
  1. 显示所有的版本
1
dnf list gitlab-runner --showduplicates
  1. 查看当前 gitlab 的版本
1
gitlab-rake gitlab:env:info
  1. 安装指定版本的 runner
1
dnf install gitlab-runner-19.2.2-1 -y

三、注册

3.1 介绍

按照可使用的范围,可以分为

  • 全局,整个 gitlab 可以使用
  • 群组,群组内的项目可以使用
  • 项目,仅当前项目可以使用

按照执行任务的方式,可以分为多种

  • shell
  • docker
  • kubenetes
  • ……

一个机器安装好 runner 后,可以注册成多个 实例。

shell、docker 比较简单,交互式创建即可,着重记录下在 kubenetes 上的使用.

3.2 kubenetes

因为 k8s 上没有 gitlab-runner 命令来注册,需要把 token 保存成 secret

secret 的创建

  1. 新建一个 runner,或者 toekn
  2. 创建命名空间
1
kubectl create namespace gitlab-runner
  1. 创建 secret

    • gitlab 认证令牌
    1
    2
    3
    kubectl -n gitlab-runner create secret generic gitlab-runner-secret \
    --from-literal=runner-token='glrt-hjOnwhQbnJ0FCREEXNmrFG86MQpwOjIKdDozCnU6Mw8.01.17003ao2s' \
    --from-literal=runner-registration-token=''
    • 自建 ca 证书
    1
    2
    kubectl -n gitlab-runner create secret generic gitlab-ca \
    --from-file=gitlab.qx.lab.crt=/root/root_ca.crt
    • harbor 拉去凭证
    1
    2
    3
    4
    kubectl -n gitlab-runner create secret docker-registry harbor-cred \
    --docker-server=harbor.qx.lab \
    --docker-username='robot$gitlab-runner' \
    --docker-password='BE8bh8kWIY3Cgb2ooMTIa9DkizDM4gsc'
  2. 验证创建好了 secret

1
kubectl -n gitlab-runner get secret

最小可用的 values.yaml

1
vim gitlab-runner-value.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# gitlab-runner-value.yaml
gitlabUrl: https://gitlab.qx.lab/

# 之前建的 Secret
runners:
secret: gitlab-runner-secret

config: |
[[runners]]
[runners.kubernetes]
namespace = "{{.Release.Namespace}}"
# job 的默认镜像,.gitlab-ci.yml 里写了 image 会覆盖它
image = "alpine:3.20"
# 内网必配:helper 镜像默认从 registry.gitlab.com 拉,拉不到会卡在 Preparing
helper_image = "harbor.qx.lab/dockerhub/gitlab/gitlab-runner-helper:x86_64-v19.2.2"
image_pull_secrets = ["harbor-cred"]
privileged = false
# 内网拉镜像慢,默认 180 秒经常不够
poll_timeout = 600

# 1.2 ② 建的 Secret,让 runner 信任自签证书
certsSecretName: gitlab-ca

concurrent: 4
checkInterval: 3
logLevel: info

# 关键:helm uninstall 时自动去 GitLab 那边注销
unregisterRunners: true
terminationGracePeriodSeconds: 3600

# 不建 RBAC 的话,job 会报 secrets is forbidden
rbac:
create: true

# runner 管理端自身的镜像,能连公网就可以整段删掉
image:
registry: harbor.qx.lab
image: dockerhub/gitlab/gitlab-runner
tag: alpine-v19.2.2
imagePullSecrets:
- name: harbor-cred
  1. helm安装
1
2
3
4
5
6
7
8
9
10
helm repo add gitlab https://charts.gitlab.io
helm repo update

# 看看 chart 版本和 runner 版本的对应关系(APP VERSION 那一列)
helm search repo -l gitlab/gitlab-runner | head

helm upgrade --install gitlab-runner gitlab/gitlab-runner \
-n gitlab-runner \
-f gitlab-runner-value.yaml \
--version 0.91.2

四、注销

4.1 介绍

这是最容易踩坑的地方——注销这件事有两侧:

是什么 删掉的后果
GitLab 侧 界面 Runners 列表里那条记录 job 不会再派给它
机器侧 config.toml 里的 [[runners]] 配置块 进程不再去轮询

只删一边会留下半残状态:

  • 只在界面上删:机器上的 runner 进程不知情,会继续每隔几秒去问 GitLab “有活吗”,然后收到 401,日志里刷一堆错误。GitLab 官方也承认这是个待改进的点。
  • 只在机器上删:界面上会留一条永远离线的僵尸记录。

所以正确姿势是从机器侧发起注销,它会同时通知 GitLab 并清理本地配置。

4.2 Shell / Docker 注销

  1. web 上删除

  2. runner 侧删除

先看看这台机器上注册了哪些:

1
gitlab-runner list

输出类似:

1
2
shell-runner   Executor=shell   Token=glrt-xxxx   URL=https://gitlab.qx.lab/
docker-runner Executor=docker Token=glrt-yyyy URL=https://gitlab.qx.lab/

注销单个(按名字,最常用):

1
gitlab-runner unregister --name shell-runner

按令牌注销:

1
gitlab-runner unregister --url https://gitlab.qx.lab/ --token glrt-xxxx

全部注销:

1
gitlab-runner unregister --all-runners

跑完再 gitlab-runner list 确认,同时看一眼 /etc/gitlab-runner/config.toml,对应的 [[runners]] 块应该没了。

4.3 Kubenetes

  1. helm 删除 gitlab runner 组件
  2. web 删除 gitlab runner