Я установил и настроил:
- локально GitLab Omnibus на СерверA , работающий по HTTPS
- локальная GitLab-Runner , установленная в качестве Docker Service в ServerB
Сертификат ServerA генерируется пользовательским корнем CA
Конфигурация
Я поместил корневой сертификат CA на сервере B:
/srv/gitlab-runner/config/certs/ca.crt
Установил Runner на ServerB , как описано в Запустите GitLab 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 версия = 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-Runner из GitLab-CI конвейер с треском проваливается, сообщая мне, что:
$ 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
Он не распознает эмитента (мой пользовательский корень ЦС), но согласно Самозаверяющим сертификатам или пользовательским центрам сертификации , пункт №1, он должен превышать из коробки:
По умолчанию: GitLab Runner считывает хранилище системных сертификатов и проверяет сервер GitLab на соответствие ЦС, хранящимся в системе .
Затем я попробовал решение из пункта n.3, редактируя
/srv/gitlab-runner/config/config.toml:
и добавление:
[[runners]]
tls-ca-file = "/srv/gitlab-runner/config/certs/ca.crt"
Но все равно не работает.
Как я могу заставить Gitlab Runner читать корневой сертификат CA?