Как можно безопасно обработать pu sh из модуля GitLab Runner KubernetesExecutor в реестр частных контейнеров? - PullRequest
1 голос
/ 05 марта 2020

Цель

Создание конвейера 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 об использовании реестра частных контейнеров, но, похоже, не стал больше с этим разбираться.
  • Подобная проблема может возникнуть, когда, например, он должен подключаться к базе данных во время процесса сборки.

1 Ответ

1 голос
/ 05 марта 2020

Это невозможно с диаграммой Шлема по умолчанию , предоставленной GitLab. Однако, есть обходной путь , когда вы настраиваете их.

В templates/configmap.yaml можно редактировать entrypoint. В самом конце бегун запускается следующим образом:

# Start the runner
exec /entrypoint run --user=gitlab-runner \
     --working-directory=/home/gitlab-runner

Чтобы это работало, генерируется config.toml на основе предоставленного values.yaml (с правильным токеном бегуна). Это означает, что прямо перед на этом шаге мы можем отредактировать config.toml в соответствии с нашими потребностями. В моем случае я просто добавил:

echo "    [[runners.kubernetes.volumes.secret]]" >> ${CONFIG_FILE}
echo "      name = \"{{ .Values.secretName }}\"" >> ${CONFIG_FILE}
echo "      mount_path = \"/keys\"" >> ${CONFIG_FILE}
echo "      read_only = true" >> ${CONFIG_FILE}

Где ${CONFIG_FILE} равно /home/gitlab-runner/.gitlab-runner/config.toml.

Наконец, вы можете развернуть GitLab Runner, используя:

$ helm install project_name -f values.yaml <path to chart>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...