Цель
Создание конвейера CI / CD для нескольких репозиториев GitLab с определенной структурой проекта. Для этого создается контейнер Docker с кодом Python, который затем безопасно отправляется в Реестр контейнеров Google Cloud.
Настройка
- KubernetesExecutor устанавливается в Kubernetes Engine с помощью Диаграмма Хелма , предоставленная GitLab.
- Базовый образ для процесса сборки (
runners.image
в values.yaml
) является пользовательским, поскольку это помогает автоматически контейнировать предоставленный репозиторий. Причина, о которой стоит упомянуть, состоит в том, что это из того же частного хранилища, куда и куда нужно отправить изображение. - Прямо сейчас, сборка контейнера из Репозиторий успешно работает (см. код ниже).
Проблема
Как мне pu sh изображение в Реестре контейнеров без добавление ключа учетной записи службы к изображению Docker (в противном случае, пожалуйста, убедитесь, что это не плохая практика)?
Код
.gitlab-ci.yml
services:
- docker:19.03.1-dind
stages:
- build
build:
stage: build
script:
- docker build -t ${CONTAINER_REGISTRY}/pyton-container-test:latest .
# This line is where I'd need to use `docker login`, I guess.
- docker push ${CONTAINER_REGISTRY}/python-container-test:latest
values.yaml (Helm)
Стоит отметить, что GitLab Runner устанавливает следующие переменные среды:
runners:
env:
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://localhost:2375
DOCKER_TLS_CERTDIR: ""
CONTAINER_REGISTRY: eu.gcr.io/<project_id>
Направление решения
I Я думаю, что я должен иметь возможность смонтировать секрет из кластера Kubernetes в модуль сборки GitLab Runner, но я не могу найти способ сделать это. Затем я смогу добавить следующую строку в .gitlab-ci.yml
:
cat mounted_secret.json | docker login -u _json_key --password-stdin https://eu.gcr.io
Настройка config.toml
на использование секретного тома должна работать. Однако с диаграммой Хелма это пока не представляется возможным.
Примечания
- Это можно установить переменные защищенной среды в GitLab CI, но я Я бы предпочел, потому что их сложнее поддерживать.
- Я исследовал этот ответ, но это говорит о том, что мне нужно добавить ключ к моему Docker изображению.
- Заглянул в документацию GitLab об использовании реестра частных контейнеров, но, похоже, не стал больше с этим разбираться.
- Подобная проблема может возникнуть, когда, например, он должен подключаться к базе данных во время процесса сборки.