Rocky Linux 10 搭建 GitLab Runner,并接入已集成 LDAP 与 CAS 的 GitLab

GitLab Runner 是 GitLab CI/CD 的作业执行器。它从 GitLab 获取 Pipeline Job,在 Shell、Docker、Kubernetes 或其他 Executor 中执行脚本,再把日志、状态和制品返回 GitLab。

用户经常提出“让 GitLab Runner 集成 LDAP 和 CAS”,但这里需要先澄清产品边界:

GitLab Runner 没有人类用户登录页面,也不会验证 LDAP 用户密码或 CAS 会话。LDAP 和 CAS 集成发生在 GitLab Server;Runner 使用以 glrt- 开头的 Runner Authentication Token 与 GitLab 进行机器到机器认证。

正确架构:

1
2
3
4
人员:LDAP -> CAS SSO -> GitLab
权限:GitLab User/Group/Project/Protected Runner
机器:GitLab Runner -> Runner Authentication Token -> GitLab
作业:GitLab -> CI_JOB_TOKEN/CI Variables -> Runner

因此本文标题中的“集成 LDAP+CAS”实际含义是:

  1. GitLab 已接入 OpenLDAP 和 CAS SAML/OIDC;
  2. LDAP/CAS 用户按 GitLab 权限创建和管理 Runner;
  3. Runner 使用专用 Token 注册;
  4. Pipeline 权限继承 GitLab 项目、分支、环境和 Token 策略;
  5. Runner 本身不保存人员 LDAP 密码和 CAS Cookie。

一、整体架构

组件 地址 说明
GitLab https://gitlab.example.com 已接入 LDAP/CAS
GitLab Runner runner01.example.com Rocky Linux 10
OpenLDAP ldaps://ldap.example.com:636 用户主数据
CAS https://sso.example.com/cas 人员 SSO
Container Registry registry.example.com 或 GitLab Registry 构建镜像
flowchart LR
    User[开发者/管理员] -->|CAS SSO| GitLab[GitLab]
    GitLab -->|LDAP Identity| LDAP[OpenLDAP]
    CAS[CAS] -->|LDAP Bind| LDAP

    Runner[GitLab Runner] -->|glrt Token| GitLab
    GitLab -->|Job Request| Runner
    Runner -->|CI_JOB_TOKEN| Repo[Git Repository]
    Runner -->|CI Variables| Registry[Container/Package Registry]

身份与授权边界:

对象 认证方式 权限来源
开发者 CAS/LDAP GitLab Group/Project Role
GitLab Admin CAS/LDAP 或本地应急账号 Instance Admin
Runner Manager glrt- Token Runner Scope/配置
CI Job CI_JOB_TOKEN、Deploy Token、OIDC Project/Job Policy
Docker Registry Job Token/Robot/Deploy Token Registry Project Policy

二、Runner Scope 设计

GitLab Runner 可以是:

类型 作用范围
Instance Runner 整个 GitLab Instance
Group Runner 一个 Group 及其子组/项目
Project Runner 单个 Project

推荐优先级:

1
2
3
敏感生产项目:Project Runner
业务团队共享:Group Runner
通用低风险任务:Instance Runner

不要用一个拥有特权 Docker 权限的 Instance Runner 执行全公司的不可信代码。

2.1 LDAP/CAS 用户如何管理 Runner

人员先通过 CAS 登录 GitLab,再由 GitLab Role 决定是否可以:

  • 创建 Instance Runner;
  • 创建 Group Runner;
  • 创建 Project Runner;
  • 查看 Runner Token;
  • 暂停、删除和轮换 Runner;
  • 修改 Protected、Tags 和 Access Level。

CAS 只认证“是谁”,不会直接赋予 Runner 管理权限。

三、资源规划

3.1 Docker Executor

并发 CPU 内存 数据盘
1~2 4 核 8 GB 100 GB SSD
4~8 8~16 核 16~32 GB 300 GB 以上 SSD
8 以上 按 Job 压测 64 GB 以上 NVMe/独立缓存盘

容量受以下因素影响:

  • Docker Image Layer;
  • BuildKit Cache;
  • Maven/npm/Gradle Cache;
  • Artifacts;
  • 并行容器;
  • 测试报告;
  • DinD;
  • 日志。

3.2 Shell Executor

Shell Executor 直接在宿主机执行 CI 脚本,隔离性很弱。它适合:

  • 受控仓库;
  • 专用构建机;
  • iOS/硬件/特殊工具链;
  • 不运行 Fork/MR 中不可信代码。

不要在装有生产 SSH Key、数据库密码或管理员 Kubeconfig 的机器上运行开放项目 Shell Runner。

四、Rocky Linux 10 初始化

1
2
3
4
cat /etc/rocky-release
uname -r
uname -m
hostnamectl
1
2
3
4
hostnamectl set-hostname runner01.example.com
timedatectl set-timezone Asia/Shanghai
systemctl enable --now chronyd
chronyc tracking
1
2
3
4
5
6
7
8
dnf clean all
dnf makecache
dnf upgrade -y

dnf install -y \
curl vim jq git openssh-clients \
ca-certificates bind-utils lsof \
policycoreutils-python-utils firewalld
1
2
systemctl enable --now firewalld
getenforce

Runner 通常只需出站访问 GitLab 和 Registry,不需要开放公网入站端口。

五、安装 GitLab Runner

5.1 添加官方仓库

1
2
3
curl -L \
"https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" \
-o /tmp/gitlab-runner-repo.sh

检查:

1
2
less /tmp/gitlab-runner-repo.sh
sudo bash /tmp/gitlab-runner-repo.sh

查看版本:

1
2
3
dnf list gitlab-runner --showduplicates \
| sort -Vr \
| head -20

安装:

1
dnf install -y gitlab-runner

检查:

1
2
3
gitlab-runner --version
systemctl status gitlab-runner --no-pager -l
id gitlab-runner

推荐 GitLab Runner 与 GitLab Server 保持相近的 Major/Minor 版本,并按 GitLab 兼容策略升级。

5.2 主要文件

路径 用途
/etc/gitlab-runner/config.toml Runner 配置和 Token
/etc/gitlab-runner/certs 私有 CA
/home/gitlab-runner Runner 用户 Home
/var/log/Journal 服务日志

config.toml 包含敏感 Runner Token:

1
2
chown root:root /etc/gitlab-runner/config.toml
chmod 0600 /etc/gitlab-runner/config.toml

实际包可能将文件所有者设为 Root/Runner,保证只有服务和管理员可读即可。

六、信任 GitLab HTTPS 证书

GitLab 使用企业 CA 时,将 CA 安装到系统:

1
2
3
4
5
install -o root -g root -m 0644 \
company-root-ca.crt \
/etc/pki/ca-trust/source/anchors/company-root-ca.crt

update-ca-trust

Runner 专用路径:

1
2
3
4
5
mkdir -p /etc/gitlab-runner/certs

install -o root -g root -m 0644 \
company-root-ca.crt \
/etc/gitlab-runner/certs/gitlab.example.com.crt

验证:

1
2
3
4
5
6
7
curl -fsS \
https://gitlab.example.com/-/readiness

openssl s_client \
-connect gitlab.example.com:443 \
-servername gitlab.example.com \
-verify_return_error

不要使用:

1
2
tls_verify = false
GIT_SSL_NO_VERIFY=true

长期绕过证书校验。

七、在 GitLab 创建 Runner

使用 CAS 登录 GitLab,然后按作用域进入:

1
2
3
Instance:Admin -> CI/CD -> Runners
Group:Group -> Settings -> CI/CD -> Runners
Project:Project -> Settings -> CI/CD -> Runners

创建 Runner 时设置:

  • Description;
  • Tags;
  • Run Untagged;
  • Protected;
  • Lock to current Project;
  • Maximum Job Timeout;
  • Maintenance Note。

创建后得到:

1
glrt-xxxxxxxxxxxxxxxx

这是 Runner Authentication Token,不是人员 Token,也不是 LDAP/CAS Token。

不要使用已弃用的 Legacy Registration Token 工作流。

八、注册 Shell Runner

1
export RUNNER_TOKEN='glrt-替换为真实Token'
1
2
3
4
5
6
gitlab-runner register \
--non-interactive \
--url 'https://gitlab.example.com' \
--token "${RUNNER_TOKEN}" \
--executor 'shell' \
--description 'rocky10-shell-runner'

清理环境变量:

1
unset RUNNER_TOKEN

检查:

1
2
3
gitlab-runner list
gitlab-runner verify
cat /etc/gitlab-runner/config.toml

Shell Runner 的 Tags、Protected、Locked 等应优先在 GitLab 创建 Runner 时配置。

8.1 Shell Runner 最小权限

Runner 使用:

1
gitlab-runner

用户执行 Job。不要无条件配置:

1
gitlab-runner ALL=(ALL) NOPASSWD: ALL

需要构建命令时:

  • 安装到固定目录;
  • 通过 Toolchain 管理;
  • 必要 Sudo 精确到命令;
  • 不允许覆盖 systemd、SSH、Firewall;
  • 不保存生产密钥。

九、安装 Docker Engine

Docker Executor 需要 Docker:

1
2
3
4
dnf remove -y \
docker docker-client docker-client-latest docker-common \
docker-latest docker-latest-logrotate docker-logrotate \
docker-engine podman-docker
1
2
3
4
5
6
7
8
9
10
11
dnf install -y dnf-plugins-core

dnf config-manager \
--add-repo \
https://download.docker.com/linux/rhel/docker-ce.repo

dnf install -y \
docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin

systemctl enable --now docker

9.1 Docker 权限风险

将 Runner 加入 Docker Group:

1
2
usermod -aG docker gitlab-runner
systemctl restart gitlab-runner

意味着 Runner Job 基本可以取得宿主机 Root 权限,例如挂载 / 或 Docker Socket。

因此:

  • 使用专用 Runner Host;
  • 不与生产服务混布;
  • 只执行可信项目;
  • Protected Runner 只跑 Protected Branch/Tag;
  • 不允许公共 Fork 使用;
  • 定期重建 Runner Host。

十、注册 Docker Runner

1
export RUNNER_TOKEN='glrt-替换为真实Token'
1
2
3
4
5
6
7
gitlab-runner register \
--non-interactive \
--url 'https://gitlab.example.com' \
--token "${RUNNER_TOKEN}" \
--executor 'docker' \
--docker-image 'alpine:3.22' \
--description 'rocky10-docker-runner'
1
unset RUNNER_TOKEN

查看 /etc/gitlab-runner/config.toml

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
concurrent = 4
check_interval = 3
shutdown_timeout = 30

[[runners]]
name = "rocky10-docker-runner"
url = "https://gitlab.example.com"
token = "glrt-REDACTED"
executor = "docker"
request_concurrency = 2

[runners.docker]
tls_verify = true
image = "alpine:3.22"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
shm_size = 268435456
network_mtu = 0
volumes = [
"/cache"
]

[runners.cache]
Type = ""
Shared = false

验证配置:

1
2
3
gitlab-runner verify
gitlab-runner list
systemctl restart gitlab-runner

十一、Runner 配置调优

11.1 concurrent

全局:

1
concurrent = 4

表示该 Runner Manager 同时执行的 Job 总数。

不要设置为 CPU 数的几十倍。Job 可能同时占用:

  • CPU;
  • 内存;
  • Docker Layer;
  • 网络;
  • Maven/npm Cache;
  • 测试容器;
  • 数据库 Service。

11.2 request_concurrency

1
request_concurrency = 2

控制 Runner 同时向 GitLab请求 Job 的 Long Poll 数量。Runner 数量和 Job 短时突发较大时可调整,但不要将其当成 Job 并发参数。

11.3 limit

单个 Runner:

1
limit = 4

全局 concurrent 和单 Runner limit 共同限制。

11.4 output_limit

1
output_limit = 16384

单位通常为 KB,用于限制 Job Log,防止失控输出占满 GitLab 和网络。

11.5 Docker 资源限制

1
2
3
4
5
6
[runners.docker]
memory = "4g"
memory_swap = "4g"
memory_reservation = "2g"
cpus = "2"
shm_size = 536870912

实际语法以当前 Runner 版本文档为准。限制应结合 Job 类型。

11.6 Helper Image

使用私有 Registry 或离线环境时,需要同步 GitLab Runner Helper Image,并确保与 Runner 版本一致。不要随意固定一个跨版本 Helper Image。

十二、Docker Build 策略

12.1 Docker Socket

1
2
3
4
volumes = [
"/var/run/docker.sock:/var/run/docker.sock",
"/cache"
]

这是高风险方案:Job 可以控制宿主机 Docker Daemon。

适合:

  • 专用可信 Runner;
  • Protected Project;
  • 不运行外部 MR;
  • 宿主机可随时重建。

12.2 Docker-in-Docker

.gitlab-ci.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
image: docker:28-cli

services:
- name: docker:28-dind
command:
- --tls=true

variables:
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_CERTDIR: /certs

build-image:
script:
- docker info
- docker build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA" .
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA"

DinD 常需要 privileged = true,同样有较大风险和额外 I/O。

12.3 BuildKit/Buildah/Kaniko

更安全的镜像构建可评估:

  • Rootless BuildKit;
  • Buildah;
  • Podman;
  • Kaniko;
  • Kubernetes Executor 隔离 Pod。

没有一种方案自动安全,仍需控制 Build Context、Secret 和 Registry 权限。

十三、LDAP/CAS 权限如何传递到 Pipeline

用户通过 CAS 登录 GitLab,GitLab 已根据 LDAP/SAML Identity 知道用户身份。用户触发 Pipeline 后:

1
2
3
4
5
GitLab 检查用户项目权限
-> 检查 Protected Branch/Environment
-> 创建 Job
-> Runner 用 glrt Token 获取 Job
-> Job 获得受限 CI_JOB_TOKEN 和 CI Variables

Runner 不需要知道:

  • 用户 LDAP 密码;
  • CAS TGT;
  • SAML Assertion;
  • 用户浏览器 Cookie。

13.1 CI_JOB_TOKEN

Job 可使用:

1
CI_JOB_TOKEN

访问 GitLab 允许的资源。权限应通过 Job Token Scope 限制。

13.2 Protected Variables

生产 Secret:

  • 标记 Protected;
  • 标记 Masked/Hidden;
  • 只在 Protected Branch/Tag;
  • 使用 Environment Scope;
  • 定期轮换;
  • 优先 Vault/OIDC 短期凭证。

CAS 登录用户不应该因为是 Maintainer 就能在 Job Log 中看到生产密码。

十四、Runner 标签与权限隔离

推荐 Tags:

1
2
3
4
5
6
rocky10
docker
java21
node24
trusted
production

.gitlab-ci.yml

1
2
3
4
5
6
7
8
9
10
deploy-production:
tags:
- rocky10
- production
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
environment:
name: production
script:
- ./deploy.sh

生产 Runner:

  • Protected;
  • Locked;
  • 不 Run Untagged;
  • 只允许受控 Group/Project;
  • 只执行 Protected Ref;
  • 不运行 Fork MR。

十五、缓存

15.1 本地 Cache

1
2
[runners.docker]
volumes = ["/cache"]

单机简单,但 Runner 重建后丢失,无法多节点共享。

15.2 S3/MinIO Cache

1
2
3
4
5
6
7
8
9
10
[runners.cache]
Type = "s3"
Path = "gitlab-runner"
Shared = true

[runners.cache.s3]
ServerAddress = "minio.example.com"
BucketName = "gitlab-runner-cache"
BucketLocation = "us-east-1"
Insecure = false

Access Key/Secret 应通过安全配置注入。

15.3 Cache Key

1
2
3
4
5
6
cache:
key:
files:
- package-lock.json
paths:
- .npm/

不要让所有项目共享固定 Key:

1
cache

否则会出现污染、越权和难以复现。

十六、npm/Maven/Docker 私服凭证

16.1 npm

1
2
3
4
5
6
7
8
9
10
11
12
13
variables:
NPM_CONFIG_USERCONFIG: "$CI_PROJECT_DIR/.npmrc"

before_script:
- |
cat > .npmrc <<EOF_NPM
@company:registry=https://npm.example.com/
//npm.example.com/:_authToken=${NPM_TOKEN}
always-auth=true
EOF_NPM

after_script:
- rm -f .npmrc

NPM_TOKEN 放在 Protected CI Variable。

16.2 Container Registry

GitLab Registry:

1
2
3
4
5
6
before_script:
- echo "$CI_REGISTRY_PASSWORD" |
docker login \
-u "$CI_REGISTRY_USER" \
--password-stdin \
"$CI_REGISTRY"

Harbor:

1
2
3
4
5
6
before_script:
- echo "$HARBOR_ROBOT_SECRET" |
docker login \
-u "$HARBOR_ROBOT_USER" \
--password-stdin \
harbor.example.com

使用 Robot Account,不使用人员 CAS 密码。

十七、systemd 与服务监控

包安装后:

1
systemctl enable --now gitlab-runner
1
2
systemctl status gitlab-runner --no-pager -l
journalctl -u gitlab-runner -f

Override:

1
systemctl edit gitlab-runner
1
2
3
4
5
6
7
8
9
[Unit]
StartLimitIntervalSec=60
StartLimitBurst=5

[Service]
Restart=on-failure
RestartSec=5s
LimitNOFILE=65536
TasksMax=65536
1
2
systemctl daemon-reload
systemctl restart gitlab-runner

检查:

1
2
3
4
systemctl show gitlab-runner \
-p Restart \
-p LimitNOFILE \
-p TasksMax

Runner 健康不仅是进程 Active,还应检查:

1
gitlab-runner verify

以及 GitLab UI 中 Last Contact。

十八、Docker 与磁盘治理

1
2
3
docker system df
df -hT /var/lib/docker
df -ih /var/lib/docker

定期清理必须谨慎。可以清理超过一定时间且未使用的缓存:

1
2
docker builder prune \
--filter 'until=168h'

不要在 Job 运行期间执行全量:

1
docker system prune -a --volumes

它可能删除仍需要的 Cache 和 Service Volume。

推荐:

  • Docker Data Root 独立盘;
  • SSD/NVMe;
  • 监控 inode;
  • 清理策略错峰;
  • Runner Host 可重建;
  • 基础镜像走私有 Proxy Cache。

十九、安全加固

19.1 Runner Token

glrt- Token 存储在:

1
/etc/gitlab-runner/config.toml

泄露后攻击者可能克隆 Runner Manager。措施:

  • chmod 0600
  • 不提交 Git;
  • 不输出日志;
  • 定期 Rotate;
  • Runner 删除后 Revoke;
  • 主机入侵后立即轮换。

19.2 Executor 隔离

安全级别从弱到强并不是绝对,但通常:

1
2
3
4
5
共享 Shell Runner:风险高
共享 Docker Privileged:风险高
专用 Docker Runner:可控
Kubernetes 每 Job Pod:隔离更清晰
临时 VM/Autoscaling Runner:更强隔离

19.3 Untrusted Code

Fork/Merge Request 中的代码可以:

  • 读取工作区;
  • 探测网络;
  • 消耗 CPU/磁盘;
  • 尝试读取 Secret;
  • 利用 Docker Socket;
  • 污染 Cache。

因此外部 MR 不得运行在生产 Runner。

19.4 LDAP/CAS 不保护 Runner Host

人员使用 CAS 登录 GitLab,并不自动保护 Runner 宿主机。Runner Host 仍需:

  • SSH Key/MFA;
  • 管理网;
  • Sudo 最小权限;
  • OS Patch;
  • EDR/审计;
  • SELinux;
  • 防火墙;
  • 不与 GitLab Server 共机。

二十、备份与恢复

Runner 本身基本是可重建节点。备份重点:

1
2
3
4
5
6
/etc/gitlab-runner/config.toml
/etc/gitlab-runner/certs
自定义 Helper/Hook
缓存配置
systemd Override
Runner 标签和作用域记录

备份:

1
2
3
4
5
6
7
8
9
10
11
mkdir -p /backup/gitlab-runner

systemctl stop gitlab-runner

tar --xattrs --acls \
-czf "/backup/gitlab-runner/runner-$(date +%F-%H%M%S).tar.gz" \
/etc/gitlab-runner \
/etc/systemd/system/gitlab-runner.service.d \
2>/dev/null

systemctl start gitlab-runner

备份文件包含 Token,必须加密。

更推荐通过 IaC 重建:

1
2
3
4
5
Ansible/Terraform 创建主机
-> 安装 Runner
-> 从 Secret Manager 获取 glrt Token
-> 注册
-> 验证

二十一、升级

查看版本:

1
2
gitlab-runner --version
dnf list gitlab-runner --showduplicates | sort -Vr

升级:

1
2
3
4
5
6
7
gitlab-runner pause 2>/dev/null || true
systemctl stop gitlab-runner

dnf upgrade -y gitlab-runner

systemctl start gitlab-runner
gitlab-runner verify

按 GitLab UI 暂停 Runner、等待 Job 完成后再升级,避免中断构建。

固定版本:

1
dnf install -y gitlab-runner-目标版本

确认 Runner Helper Image 与版本匹配。

二十二、常见故障

22.1 x509 unknown authority

1
2
3
4
5
6
curl -v https://gitlab.example.com/

openssl s_client \
-connect gitlab.example.com:443 \
-servername gitlab.example.com \
-showcerts

检查:

1
2
/etc/pki/ca-trust/source/anchors
/etc/gitlab-runner/certs/gitlab.example.com.crt

更新后:

1
2
update-ca-trust
systemctl restart gitlab-runner

22.2 Runner 注册 403

检查:

  • Token 是否 glrt-
  • Runner 是否已在 UI 创建;
  • URL 是否正确;
  • Token 是否被重置;
  • GitLab 版本与 Runner 是否兼容;
  • 代理是否修改请求。

22.3 Runner Offline

1
2
3
4
gitlab-runner verify
journalctl -u gitlab-runner -n 300 --no-pager
getent hosts gitlab.example.com
curl -I https://gitlab.example.com/

检查时间、DNS、CA、Token、防火墙和代理。

22.4 Job 一直 Pending

检查:

  • Tags 是否匹配;
  • Runner 是否 Protected;
  • Branch 是否 Protected;
  • Runner 是否 Paused;
  • Run Untagged;
  • Scope;
  • Maximum Timeout;
  • 并发上限。

22.5 Docker permission denied

1
2
3
id gitlab-runner
ls -l /var/run/docker.sock
systemctl restart gitlab-runner

加入 Docker Group 后必须重启 Runner 服务。

22.6 No space left on device

1
2
3
4
df -hT
df -ih
docker system df
du -xh /var/lib/docker | sort -h | tail -30

可能是磁盘或 inode 用完。

22.7 Job 能读取不该读取的 Secret

检查:

  • Variable 是否 Protected;
  • Environment Scope;
  • Runner 是否 Protected;
  • MR Pipeline 来源;
  • Fork;
  • Job Log;
  • Cache;
  • Artifacts;
  • Docker Socket。

22.8 LDAP/CAS 用户无法创建 Runner

这不是 Runner LDAP 问题。检查 GitLab:

  • 用户是否正确关联 LDAP/SAML;
  • 用户是否 Block;
  • Group/Project Role;
  • 是否有 Owner/Admin 权限;
  • Runner 创建策略;
  • Instance Setting。

二十三、生产检查清单

  • 明确 Runner 不直接集成 LDAP/CAS;
  • GitLab 已完成 LDAP/CAS 身份接入;
  • Runner 使用 glrt- Authentication Token;
  • Legacy Registration Token 未继续使用;
  • Runner Scope 最小化;
  • Protected Runner 只跑 Protected Ref;
  • Shell/Docker Socket 风险已评估;
  • Runner Host 与生产服务隔离;
  • GitLab 企业 CA 已安装;
  • config.toml 权限受控;
  • Token 已进入轮换和撤销流程;
  • CI Secret 使用 Protected/Masked/Environment Scope;
  • 缓存 Key 隔离;
  • Docker Data Root 容量已监控;
  • Runner 版本与 GitLab 相近;
  • 已验证重建 Runner 的自动化流程;
  • 外部 MR 不进入可信生产 Runner。

二十四、总结

GitLab Runner 的正确身份关系:

1
2
3
4
人:LDAP + CAS 登录 GitLab
GitLab:判断人员能否创建和使用 Runner
Runner:使用 glrt Token 连接 GitLab
Job:使用 CI_JOB_TOKEN 和受控 Secret 访问资源

核心原则:

  1. Runner 没有 LDAP/CAS 登录能力,也不需要;
  2. 人员身份统一发生在 GitLab Server;
  3. Runner 是机器身份,使用可轮换的 Authentication Token;
  4. LDAP/CAS 用户的 GitLab Role 决定 Runner 管理权限;
  5. Pipeline Secret 与人员密码完全分离;
  6. Shell、Docker Socket 和 Privileged Runner 都应视为高权限执行环境;
  7. Runner Host 应专用、可重建、可撤销;
  8. Protected Runner、Protected Ref 和 Secret Scope 必须配套。

“让 Runner 集成 LDAP/CAS”真正要解决的不是给 Runner 加登录页,而是让人员身份、GitLab 权限、机器 Token 和 CI Secret 各守自己的边界。

参考资料


Rocky Linux 10 搭建 GitLab Runner,并接入已集成 LDAP 与 CAS 的 GitLab
https://allendericdalexander.github.io/2026/08/01/devops/linux/rocky/rocky-linux-10-gitlab-runner-ldap-cas/
作者
AtLuoFu
发布于
2026年8月1日
许可协议