作者:旭89浪子_499 | 来源:互联网 | 2022-11-30 16:02
我已安装并配置:
在HTTPS 上运行的ServerA上的本地GitLab Omnibus
在ServerB中作为Docker Service安装的本地GitLab-Runner
ServerA证书由自定义CA Root生成
配置
我已将CA根证书放在ServerB上:
/srv/gitlab-runner/config/certs/ca.crt
按照容器中的Run GitLab Runner中的描述在ServerB上安装Runner - Docker镜像安装和配置:
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
按注册跑步者 - 单行注册命令中所述注册跑步者:
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}'
并且自定义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:none
错误:作业失败:退出代码1
它无法识别Issuer(我的自定义CA Root),但根据自签名证书或自定义证书颁发机构,点n.1,它应该是开箱即用的:
默认值:GitLab Runner读取系统证书存储,并根据存储在系统中的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证书?
1> Philipp Ludw..:
您有两种选择:
忽略SSL验证
将其放在您的顶部.gitlab-ci.yml
:
variables:
GIT_SSL_NO_VERIFY: "1"
将GitLab-Runner指向正确的证书
如官方文档中所述,您可以使用tls-*-file选项设置证书,例如:
[[runners]]
...
tls-ca-file = "/etc/gitlab-runner/ssl/ca-bundle.crt"
[runners.docker]
...
如文档所述,“每次运行程序尝试访问GitLab服务器时,都会读取此文件。”
其他选项包括tls-cert-file
定义需要使用的证书。
我怀疑文档中缺少某些内容,需要对config.toml进行一些调整(例如tls_verify应该具有什么值,priviledge_mode等具有什么值),仅靠tls-ca-file恕我直言是不够的。而且,不用说根据该页面,一切都应该不做任何事情:/
2> Andrea Ligio..:
尽管我仍然不知道为什么它不能开箱即用,但是我发现了哥伦布的蛋:
Gitlab-Runner配置:
[[runners]]
name = "MyDockerServer-Runner"
url = "https://MY_PRIVATE_REPO_URL_HERE/"
token = "MY_TOKEN_HERE"
executor = "docker"
...
[runners.docker]
image = "ubuntu:latest"
# The trick is the following:
volumes = ["/cache","/srv/gitlab-runner/config:/etc/gitlab-runner"]
...
Gitlab-ci.yml管道:
MyJob:
image: ubuntu:latest
script:
- awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' /dev/null
- apt-get install -y apt-utils dialog >/dev/null
- apt-get install -y git >/dev/null
- apt-get install -y wget >/dev/null
# The trick is the following:
- cp /etc/gitlab-runner/certs/ca.crt /usr/local/share/ca-certificates/ca.crt
- update-ca-certificates
而已:
挂载一次卷(每个Docker执行器)
一次更新CA证书(每个作业)
一切都将如预期:git clone
,wget https
,等...
一个不错的解决方法,直到GitLab上的某个人解决它或向我解释我错了(成为我的客人!)