Вход в Docker из GitLab CI без возможности доступа к паролю реестра Docker из.gitlab-ci.yaml?
Я пытаюсь настроить среду CI для создания и отправки образа Docker для проекта. Реестр Docker, к которому я пытаюсь перейти, является частным реестром, который требует от меня входа в систему. Я могу войти в реестр, используя docker login my-registry
команда.
Я не могу изменить конфигурацию реестра.
В настоящее время я использую GitLab shell
бегун на моем ПК, который создает образ Docker. Бегун также должен иметь возможность войти в реестр с помощью вышеупомянутой команды. Проблема в том, что ему, конечно, нужны полномочия.
Я не хочу хранить учетные данные в виде простого текста где-то gitlab-runner
пользователь может получить к ним доступ напрямую, потому что кто-то с доступом к .gitlab-ci.yaml
может тогда просто сделать cat password.txt
или же docker-credentials-secretservice get
или что-то подобное, чтобы получить учетные данные.
Вопросы:
- Есть ли способ хранить учетные данные таким образом, чтобы только
docker login
может получить доступ и расшифровать их, и никакая другая команда, которая может быть выполнена из.gitlab-ci.yaml
? - Есть ли альтернативный способ создания и отправки образа докера в частный реестр, когда у меня нет доступа к конфигурации реестра?
2 ответа
К сожалению, вам нужно войти в систему в каждом «сеансе» gitlab-runner и сохранить учетные данные. Вы можете сохранить его в Gitlab как защищенную и/или замаскированную переменную. Переменная-маска подойдет, но существуют ограничения на использование с ней специальных символов, и всегда можно открыть замаскированную переменную при использовании специальных сценариев. Защищенные переменные используются только для защищенных веток, поэтому при использовании мерж-реквестов можно избежать раскрытия содержимого переменной, когда вы используете ее только внутри защищенной ветки для отправки изображения.
Итак, создайте три переменные от имени администратора в Меню > Администратор > Настройки > CI/CD > Переменные или для каждой группы или проекта в настройках проекта или группы. Назовем их DOCKER_USER, DOCKER_PASS и DOCKER_REGISTRY. Тебе решать.
Затем измените свой gitlab-ci.yml и добавьте
echo -n ${DOCKER_PASS} | docker login -u ${DOCKER_USER} --password-stdin ${DOCKER_REGISTRY}
Итак, запускается вход в докер, принимает пароль со стандартного ввода и получает эхо-вывод в качестве пароля. Он не будет напечатан в выводе журнала. Вы можете использовать before_script или поместить его в собственный образ ci/cd.
В вашей машине бегуна, попробуйте su для gitlab-runner и docker login -u username private.host
, Тогда учетные данные для входа будут храниться в ~/.docker/config.json, и теперь это будет хорошо для командировщика gitlab-runner