我已经安装并配置:
- 在 HTTPS 上运行的ServerA上的本地GitLab Omnibus
- 在ServerB中作为 Docker 服务安装的本地GitLab-Runner
ServerA 证书由自定义 CA Root 生成
配置
我已将 CA 根证书放在 ServerB 上:
/srv/gitlab-runner/config/certs/ca.crt
如在容器中运行 GitLab Runner - Docker 映像安装和配置中所述,在ServerB上安装了 Runner :
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
按照注册 Runners - 单行注册命令中的说明注册Runner :
docker run --rm -t -i
-v /srv/gitlab-runner/config:/etc/gitlab-runner
--name gitlab-docker-runner gitlab/gitlab-runner register \
--non-interactive \
--executor "docker" \
--docker-image alpine:latest \
--url "https://MY_PRIVATE_REPO_URL_HERE/" \
--registration-token "MY_PRIVATE_TOKEN_HERE" \
--description "MyDockerServer-Runner" \
--tag-list "TAG_1,TAG_2,TAG_3" \
--run-untagged \
--locked="false"
该命令给出以下输出:
更新 CA 证书...
运行时平台 arch=amd64 os=linux pid=5 revision=cf91d5e1 version=11.4.2
在系统模式下运行。正在注册跑步者...成功跑步者=8UtcUXCY
跑步者注册成功。随意启动它,但如果它已经在运行,配置应该会自动重新加载!
我检查过
$ docker exec -it gitlab-runner bash
并且一旦在容器中
$ awk -v cmd='openssl x509 -noout -subject' '
/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt
并且自定义 CA 根目录正确存在。
问题
从 GitLab-CI 运行 Gitlab-Runner 时,管道失败,惨痛地告诉我:
$ git clone https://gitlab-ci-token:${CI_BUILD_TOKEN}@ServerA/foo/bar/My-Project.wiki.git
克隆到“My-Project.wiki”...
致命:无法访问“ https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@ServerA/foo/bar/My-Project.wiki.git/ ”:服务器证书验证失败。CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile:无
错误:作业失败:退出代码 1
它不识别颁发者(我的自定义 CA 根),但根据自签名证书或自定义证书颁发机构,第 n.1 点,它应该是开箱即用的:
默认值:GitLab Runner 读取系统证书存储并根据存储在 system 中的 CA 验证 GitLab 服务器。
然后我尝试了第 n.3 点的解决方案,编辑
/srv/gitlab-runner/config/config.toml:
并添加:
[[runners]]
tls-ca-file = "/srv/gitlab-runner/config/certs/ca.crt"
但它仍然不起作用。
如何让 Gitlab Runner 读取 CA Root 证书?