我的公司更改了证书颁发机构(它是一个单一的 CA,现在我们有一个根 CA 和一个中间 CA)。我成功更改了 GitLab 实例中的配置并移至运行器(即在 Ubuntu 18.04.5 LTS 上)。我试图遵循GitLab 文档但没有成功。
我遵循此处的默认方法,即“默认 - 读取系统证书”,因此我将证书(CA 和中级)添加到 Ubuntu CA 列表中。一切似乎都奏效了,因为跑步者出现在 GitLab 中。
我开始工作,我得到:
Running with gitlab-runner 11.5.0 (3afdaba6)
on RUN01 12ccbb74
Using Docker executor with image node:latest ...
Pulling docker image node:latest ...
Using docker image sha256:ab773999a02271b25a9f3bce46018fc3ad46a7f922a5e3e8712b6d1c7087c415 for node:latest ...
Running on runner-12ccbb74-project-73-concurrent-0 via (...)...
00:02
Fetching changes...
00:01
HEAD is now at 60b6860 Update dependency mocha to v9
fatal: unable to access 'https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@(...).git/': SSL certificate problem: unable to get issuer certificate
ERROR: Job failed: exit code 1
然后我(在 GitLab 实例上)将完整链添加到证书文件中,错误更改为SSL certificate problem: self signed certificate in certificate chain
.
我的逻辑*:它适用于 Ubuntu,但不适用于 Docker。所以我转到了Docker 和 Kubernetes 执行程序的信任 TLS 证书部分。
到目前为止我已经尝试过,但没有成功:
- 我将根 CA 证书添加到
/etc/gitlab-runner/certs/ca.crt
. - 我还尝试使用链中包含根 CA 和中间 CA 的文件。
- 我添加
volumes = ["/cache", "/path/to-ca-cert-dir/ca.crt:/etc/gitlab-runner/certs/ca.crt:ro"]
到config.toml
文件中。但我几乎可以肯定我应该/path/to-ca-cert-dir
用一些东西代替。我只是不知道是什么。
*更新:当我安装 GitLab Runner 时,我使用 Debian/Ubuntu/CentOS/RedHat 的 GitLab 存储库安装,因此 Docker/K8s 说明没有意义。我发布了有关如何解决此问题的答案。
我能够按照Supported options for self-signed certificate targets the GitLab server中的第三个选项使其工作,即:
所以我只是将完整的链(GitLab 证书、中级、根)添加到文件名
/etc/gitlab-runner/certs/<gitlab-url>.crt
中。重新启动服务gitlab-runner restart
并且工作正在运行。