Вход в 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

Другие вопросы по тегам