由于公司 gitlab 回滚,导致很多项目 CI/CD 的 runner token 失效,对于近期有更新的项目 gitlab 那边的同事还能帮忙处理,但是有些年久失修的项目就需要自己动手创建一个对应的 runner
创建 Runner 容器
随便找一台有 docker 的 Ubuntu 机器
这里有个隐性要求,如果 runner 需要拉取的镜像是在
非 TLS
的服务器上的,就需要配置/etc/docker/daemon.json
中的insecure-registries
标签,如:需要从192.168.13.25
镜像仓库拉取镜像,就需要配置"insecure-registries": ["192.168.13.25:5002"]
,不然无法拉取镜像。关键一点:配置完 daemon.json 需要重启 docker 生效,所以需自行评估操作风险
先尝试拉下 gitlab-runner
的镜像
1 | $ docker pull gitlab-runner:latest |
如果拉不到就去有镜像的服务器上手动导出一个
1 | $ docker save gitlab-runner:latest -o ./gitlab_runner.tar |
然后上传到待创建的服务器上,加载镜像
1 | $ docker load -i gitlab_runner.tar |
检查下镜像有没有导入
1 | $ docker images |grep runner |
如果发现没有 REPOSITORY
和 TAG
信息就手动打个 tag
1 | $ docker tag <image-id> gitlab/gitlab-runner:latest |
接下来进入正题,创建 runner 容器
首先需要准备一个 runner 的 config.toml
挂载文件
到任意路径下创建一个 config.tomal
1 | listen_address = ":9252" |
这个配置文件需要挂载到 runner 容器中
1 | $ docker run -d --privileged --name gitlab-runner \ |
注册 Runner
runner 正常启动后,进入对应项目的 CI/CD 设置页,找到项目的 runner 特征值
为该项目注册 runner
1 | # 项目的 token |
注册完成后,进入 runner 的配置文件中 config.toml
会看到有增加一个 runner 的配置,需要修改部分内容
1 | listen_address = ":9252" |
到此 runner 就算创建完成
异常处理
不出意外的话,那就是要出意外了
基础镜像拉取失败
由于不可描述的原因,国内无法直接拉取镜像,这里需要将
config.toml
中的image = "alpine"
改为image = "192.168.13.25:5002/base/maven:3-jdk-8"
gitlab-runner-helper 镜像拉取失败
原因同上,这里需要从其他地方导入一个 gitlab-runner-helper 镜像(为啥需要这个镜像的原因未知)
Cannot link to a non running container
具体原因未知,但经试验发现,可能是 runner 的镜像版本原因,将 gitlab-runner 的版本换成
alpine-v13.8.0
试试吧
附
docker daemon.json 配置说明
insecure-registries:指定不使用 HTTPS 的私有镜像仓库列表
1
"insecure-registries": ["myregistry.local:5000"]
允许 Docker 连接到不使用 SSL 的镜像仓库
registry-mirrors:指定 Docker 镜像的加速镜像站点
1
"registry-mirrors": ["https://mirror.gcr.io"]
提供快速的镜像拉取速度,尤其是在网络不佳的情况下
data-root:指定 Docker 存储数据的根目录
1
"data-root": "/mnt/docker-data"
更改 Docker 默认的存储位置,以节省磁盘空间或优化性能
storage-driver:指定 Docker 使用的存储驱动
1
"storage-driver": "overlay2"
选择不同的存储驱动来优化性能或兼容性
log-level:设置 Docker 日志的详细级别
1
"log-level": "debug"
设定日志记录的详细程度,帮助调试问题
log-opts:配置 Docker 容器日志的行为
1
2
3
4"log-opts": {
"max-size":"100m",
"max-file":"1"
}"max-size": "100m":设置单个日志文件的最大大小为 100 MB
当日志文件的大小达到 100 MB 时,Docker 会自动进行日志轮换。即,它会将当前日志文件重命名并创建一个新的日志文件来继续记录日志
"max-file": "1":设置要保留的旧日志文件的数量为 1
在日志轮换时,Docker 会保留一个轮换的日志文件。如果
max-file
设置为 1,Docker 将只保留一个旧日志文件并删除其他的。这有助于控制磁盘空间的使用
exec-opts:设置执行选项,如默认的
log-opts
1
"exec-opts": ["native.cgroupdriver=systemd"]
配置 Docker 的 Cgroup 驱动类型,以适配系统的 Cgroup 配置
bip:设置 Docker 的默认桥接网络 IP 地址
1
"bip": "192.168.1.5/24"
更改 Docker 默认的网络桥接配置,可能用于避免 IP 冲突
default-address-pools:配置用于设置 Docker 默认网络地址池
1
2
3
4"default-address-pools": [{
"base": "170.10.0.1/16",
"size": 24
}]- "base": "170.10.0.1/16":指定地址池的起始地址和子网掩码
- "size": 24:定义从地址池中分配的子网的大小。
24
表示每个子网将有 256 个 IP 地址(子网掩码/24
)