Работа с Container Registry из GitLab

GitLab — инструмент непрерывной интеграции. GitLab позволяет собирать, тестировать и запускать контейнеризованные приложения. Вы можете настроить GitLab на использование Container Registry для хранения и получения Docker-образов ваших приложений при выполнении сценария сборки.

Чтобы собрать Docker-образ при выполнении сценария GitLab:

Перед началом работы

Создайте виртуальную машину из образа GitLab

Запустите GitLab на виртуальной машине с публичным IP-адресом:

  1. На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.

  2. В поле Имя введите имя виртуальной машины: ci-tutorial-gitlab.

  3. Выберите зону доступности, в которой будет находиться виртуальная машина.

  4. В разделе Образы нажмите кнопку Выбрать.

  5. В открывшемся окне откройте вкладку DevTools.

  6. Выберите образ GitLab.

  7. В блоке Вычислительные ресурсы укажите следующую конфигурацию:

    • vCPU2
    • Гарантированная доля vCPU100%
    • RAM2 ГБ
  8. В блоке Сетевые настройки выберите, к какой подсети подключить виртуальную машину при создании.

  9. В поле Публичный адрес укажите Автоматически.

  10. Укажите данные для доступа на виртуальную машину:

    • В поле Логин введите имя пользователя.
    • В поле SSH ключ скопируйте содержимое файла открытого ключа. Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилиты ssh-keygen в Linux и macOS или PuTTYgen в Windows.
  11. Нажмите кнопку Создать ВМ.

Создание виртуальной машины может занять несколько минут. Когда виртуальная машина перейдет в статус RUNNING, вы можете перейти к ее настройке.

При создании виртуальной машине назначаются IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.

Настройте GitLab

Чтобы настроить GitLab и подготовить процесс непрерывной интеграции (Continuous Integration, CI), создайте новый проект и введите параметры для авторизации в CI.

  1. Откройте в браузере административную панель GitLab на созданной ВМ. Для этого откройте в браузере ссылку вида http://<публичный-IP-адрес-ВМ>.
  2. Задайте пароль администратора.
  3. Авторизуйтесь с логином root и заданным паролем администратора.
  4. Выберите сервис Create a project.
  5. Задайте имя проекта: gitlab-test.
  6. Нажмите кнопку Create project.

Настройте сборку Docker-образа из CI

Для того, чтобы собрать Docker-образ, вам необходимо подключиться к Docker-серверу.

GitLab позволяет задавать сценарии сборки в YAML-файле. Файл конфигурации .gitlab-ci.yml будет выглядеть следующим образом:

build:
  stage: build
  variables:
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""
    DOCKER_HOST: tcp://localhost:2375/
  image: docker:19.03.1
  services:
    - docker:19.03.1-dind
  script:
    - docker build . -t cr.yandex/<registry-id>/<image-name>

Здесь:

  • передаются переменные окружения для использования Docker-сервера;
  • Docker-сервер поднимается как GitLab сервис, рядом с Docker-контейнером для сборки Docker-образа. Подробнее про сборку вы можете прочитать в документации GitLab про сборку Docker-контейнеров.

Подробнее про то, как настроить сборку Docker-образа из CI, читайте в документации GitLab про интеграцию с Docker.

После успешной сборки, загрузите Docker-образ в Container Registry, чтобы он был доступен для дальнейшей работы. Для этого аутентифицируйтесь в Container Registry.

Аутентифицируйтесь в Container Registry

Есть два способа аутентификации из GitLab Runner в Container Registry:

Динамическая

Этот вариант аутентификации работает только если к виртуальной машине с GitLab привязан сервисный аккаунт. О том, как привязать сервисный аккаунт, читайте в разделе Работа с Яндекс.Облаком изнутри ВМ.

Для того, чтобы Docker мог получать метаданные из сервиса метаданных, воспользуйтесь публичным Docker-образом с именем cr.yandex/yc/metadata-token-docker-helper:0.1. Внутри него работает Docker credential helper, который получает IAM-токен из сервиса метаданных. Используйте данный Docker-образ на этапе сборки вашего приложения.

Файл конфигурации .gitlab-ci.yml будет выглядеть следующим образом:

build:
  stage: build
  variables:
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""
    DOCKER_HOST: tcp://localhost:2375/
  image: cr.yandex/yc/metadata-token-docker-helper:0.1
  services:
    - docker:19.03.1-dind
  script:
    - docker build . -t cr.yandex/<registry-id>/<image-name>
    - docker push cr.yandex/<registry-id>/<image-name>

Статическая

В переменную окружения GitLab пропишите содержимое авторизованного ключа вашего сервисного аккаунта (с необходимыми правами) и используйте данную переменную при сборке Docker-образа. Подробнее про использование json-key в Container Registry.

Файл конфигурации .gitlab-ci.yml будет выглядеть следующим образом:

build:
  stage: build
  variables:
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""
    DOCKER_HOST: tcp://localhost:2375/
  image: docker:19.03.1
  services:
    - docker:19.03.1-dind
  script:
    - echo <your env-variable> | docker login -u json_key --password-stdin cr.yandex
    - docker build . -t cr.yandex/<registry-id>/<image-name>
    - docker push cr.yandex/<registry-id>/<image-name>

См. также