And*_*ios 13 gitlab root-certificate docker gitlab-ci gitlab-ci-runner
我已安装并配置:
ServerA证书由自定义CA Root生成
我已将CA根证书放在ServerB上:
/srv/gitlab-runner/config/certs/ca.crt
Run Code Online (Sandbox Code Playgroud)
按照容器中的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
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
此命令提供以下输出:
更新CA证书...
运行时平台arch = amd64 os = linux pid = 5 revision = cf91d5e1 version = 11.4.2
在系统模式下运行.注册跑步者...成功的跑步者= 8UtcUXCY
跑步者注册成功.随意启动它,但如果它已经运行,配置应该自动重新加载!
我查了一下
$ docker exec -it gitlab-runner bash
Run Code Online (Sandbox Code Playgroud)
和一次在容器中
$ awk -v cmd='openssl x509 -noout -subject' '
/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt
Run Code Online (Sandbox Code Playgroud)
并且自定义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:
Run Code Online (Sandbox Code Playgroud)
并添加:
[[runners]]
tls-ca-file = "/srv/gitlab-runner/config/certs/ca.crt"
Run Code Online (Sandbox Code Playgroud)
但它仍然无效.
如何让Gitlab Runner读取CA Root证书?
您有两种选择:
将其放在您的顶部.gitlab-ci.yml:
variables:
GIT_SSL_NO_VERIFY: "1"
Run Code Online (Sandbox Code Playgroud)
如官方文档中所述,您可以使用tls-*-file选项设置证书,例如:
[[runners]]
...
tls-ca-file = "/etc/gitlab-runner/ssl/ca-bundle.crt"
[runners.docker]
...
Run Code Online (Sandbox Code Playgroud)
如文档所述,“每次运行程序尝试访问GitLab服务器时,都会读取此文件。”
其他选项包括tls-cert-file定义需要使用的证书。
尽管我仍然不知道为什么它不能开箱即用,但是我发现了哥伦布的蛋:
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"]
...
Run Code Online (Sandbox Code Playgroud)
Gitlab-ci.yml管道:
MyJob:
image: ubuntu:latest
script:
- awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt
- git clone https://gitlab-ci-token:${CI_BUILD_TOKEN}@ServerA/foo/bar/My-Project.wiki.git
- wget -O foo.png https://ServerA/foo/bar/foo.png
before_script:
- apt-get update -y >/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
Run Code Online (Sandbox Code Playgroud)
而已:
一切都将如预期:git clone,wget https,等...
一个不错的解决方法,直到GitLab上的某个人解决它或向我解释我错了(成为我的客人!)
不确定这是最好的方法,但至少它对我有用。您可以创建自定义的 gitlab runner 镜像并在其中添加您的根 CA:
\n\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 myca.crt\nRun Code Online (Sandbox Code Playgroud)\n\n# Dockerfile\nFROM gitlab/gitlab-runner:latest\nCOPY myca.crt /usr/local/share/ca-certificates\nRUN update-ca-certificates\nRun Code Online (Sandbox Code Playgroud)\n\n构建它:
\n\ndocker build -t custom-gitlab-runner .\nRun Code Online (Sandbox Code Playgroud)\n\n并重新运行所有命令,只需记住使用这个新的图像名称即可。
\n\nDockerized gitlab-runner 似乎也会忽略您的 中的条目/etc/hosts,因此如果您在自定义域上启动了 Gitlab,例如https://gitlab.local.net,您需要传递来自/etc/hosts在启动/注册 gitlab runner 时传递值:
docker run -d --name gitlab-runner --restart always \\\n --add-host="gitlab.local.net:192.168.1.100" \\\n ...\nRun Code Online (Sandbox Code Playgroud)\n\n如果你想启动docker:dind(docker in docker service)容器来构建docker镜像,你还需要在里面设置这些值/srv/gitlab-runner/config/config.toml:
[[runners]]\n url = "https://gitlab.local.net/"\n executor = "docker"\n pre_clone_script = "echo \'192.168.1.100 gitlab.local.net registry.local.net\' >> /etc/hosts"\n ...\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3122 次 |
| 最近记录: |