- tocdepth
2
Lab 4: Настройка пайплайна CI/CD в GitHub, GitLab и GitVerse с использованием Artifact Registry
В этой лабораторной работе вы научитесь создавать процесс автоматической сборки и публикации Docker-образа из системы контроля версий GitHub, GitLab или GitVerse в Artifact Registry. А также настроите автоматическое развертывание ревизии контейнера в Container Apps.
1. Подготовьте среду
Подготовьте среду, если не сделали этого ранее.
2. Создайте реестр в Artifact Registry и получите ключи доступа
В первой лабораторной работе для загрузки образа вы создавали реестр в сервисе Artifact Registry, а также получали ключи доступа. Вы можете использовать текущий реестр и ключи доступа или создать новые. Если хотите создать новые, пройдите шаги 3-5 из первой лабораторной работы.
Сохраните URI реестра и персональные ключи доступа — они понадобятся для выполнения лабораторной работы.
3. Настройте пайплайн CI/CD в системе контроля версий
Вы можете создавать пайплайны непрерывной интеграции и непрерывного развертывания (CI/CD) с помощью GitHub Actions.
Создайте аккаунт в GitHub.
Cделайте форк репозитория Cloud.ru с примером REST API на языках Go, Python, C#, JavaScript.
Репозиторий содержит готовый код и Dockerfile для сборки Docker-образов приложений. Образы подходят для запуска на платформе linux/amd64.
Перейдите в раздел
.Нажмите кнопку New workflow и перейдите по ссылке Set up workflow youself.
Будет создан шаблон файла конфигурации в формате
.yml
в папке.gitub/workflows
.Скопируйте код из репозитория Cloud.ru и добавьте его в созданный YAML-файл.
Этот сценарий запускает создание Docker-образа и его загрузку в Artifact Registry.
В YAML‑файле в блоке
env
укажите URI реестра Artifact Registry в качестве значения ключаCR_URI
. Например, helloworld.cr.cloud.ru.Перейдите в раздел
.Укажите переменные и их значения, которые будут использоваться в команде
docker login
для аутентификации в Artifact Registry.В нашем примере YAML‑файла это следующие переменные:
EVO_CR_LOGIN
— логин персонального ключа доступа;EVO_CR_PWD
— пароль персонального ключа доступа.
После завершения редактирования YAML-файла зафиксируйте и отправьте изменения в свой репозиторий GitHub.
Коммит запустит пайплайн, каждый шаг которого будет выполняться в порядке, указанном в YAML‑файле.
Убедитесь, что все этапы выполнения сценария сборки завершились успешно.
В Artifact Registry вы должны увидеть загруженный образ.
При каждом изменении кода в GitHub обновленный образ будет автоматически отправляться в реестр Artifact Registry.
В личном кабинете перейдите в раздел Artifact Registry и убедитесь, что образ появился в реестре.
См.также
Вы можете создавать пайплайны непрерывной интеграции и непрерывного развертывания (CI/CD) с помощью шаблонов в GitLab.
Создайте аккаунт в GitLab.
Загрузите в репозиторий файлы своего контейнерного приложения.
Перейдите в раздел
.Нажмите Try test template.
Откроется окно Pipline editor для редактирования YAML-файла.
Скопируйте код из репозитория Cloud.ru и добавьте его в созданный YAML-файл.
В YAML-файле укажите значение переменных
EVO_CONTAINER_REGISTRY
иDOCKER_IMAGE_NAME
.Пример:
docker-build: image: docker:latest stage: build services: - docker:dind variables: EVO_CONTAINER_REGISTRY: <registry_name>.cr.cloud.ru DOCKER_IMAGE_NAME: $EVO_CONTAINER_REGISTRY/<image_from_gitlab>:$CI_COMMIT_REF_SLUG before_script: - docker login -u "$EVO_REGISTRY_USER" -p "$EVO_REGISTRY_PASSWORD" $EVO_CONTAINER_REGISTRY script: - docker build --pull -t "$DOCKER_IMAGE_NAME" . - docker push "$DOCKER_IMAGE_NAME" rules: - if: $CI_COMMIT_BRANCH exists: - Dockerfile
Где:
<registry_name>.cr.cloud.ru
— URI реестра в Artifact Registry. Например, helloworld.cr.cloud.ru.<image_from_gitlab>
— название вашего Docker-образа. Образ автоматически тегируется хешем коммита$CI_COMMIT_REF_SLUG
.
Перейдите в раздел
.Укажите переменные и их значения, которые будут использоваться в команде
docker login
для аутентификации в Artifact Registry.В нашем примере YAML‑файла это следующие переменные:
EVO_REGISTRY_USER
— логин персональноо ключа доступа.EVO_REGISTRY_PASSWORD
— пароль персонального ключа доступа.
Активируйте опцию Mask variable и нажмите Add variable.
После завершения редактирования YAML‑файла зафиксируйте и отправьте изменения в свой репозиторий GitLab.
Если YAML-файл и Dockerfile лежат в корне проекта, то сборка образа запускается командой
docker build --pull -t "$DOCKER_IMAGE_NAME" .
Если YAML-файл находится не в корне проекта, укажите вместо точки.
путь до директории, в которой он размещен.Коммит запустит пайплайн, каждый шаг которого будет выполняться в порядке, указанном в YAML‑файле. Убедитесь, что все этапы выполнения сценария сборки завершились успешно.
В Artifact Registry вы должны увидеть загруженный образ.
При каждом изменении кода в GitLab обновленный образ будет автоматически отправляться в реестр Artifact Registry.
В личном кабинете перейдите в раздел Artifact Registry и убедитесь, что образ появился в реестре.
Создайте проект и репозиторий в GitVerse.
Загрузите в репозиторий файлы своего контейнерного приложения.
Если у вас нет готового приложения, вы можете сделать форк репозитория Cloud.ru с примером кода приложения на React.
Подключите CI/CD и настройте раннер:
Перейдите в раздел Настройки, активируйте чекбокс CI/CD и нажмите Обновить.
Установите раннер по инструкции GitVerse.
Добавьте переменные и отредактируйте YAML-файл:
Перейдите в раздел Секреты, добавьте переменные и их значения:
EVOAR_KEYID
— логин сервисного аккаунта или персонального ключа (Key ID).EVOAR_KEYSECRET
— пароль сервисного аккаунта или персонального ключа (Key Secret).
В репозитории перейдите в директорию
и откройте YAML-файл.Перейдите в режим редактирования и в значение переменной
EVOAR_URI
укажите URI реестра в Artifact Registry.Нажмите Сохранить.
Коммит запустит пайплайн, каждый шаг которого будет выполняться в порядке, указанном в YAML‑файле.
Проверьте статус пайплайна.
Убедитесь, что все этапы выполнения пайплайна сборки завершились успешно.
При каждом изменении кода в GitVerse обновленный образ будет автоматически отправляться в реестр Artifact Registry.
В личном кабинете перейдите в раздел Artifact Registry и убедитесь, что образ появился в реестре.
4. Настройте автоматическое развертывание контейнера
Чтобы каждый раз после загрузки в реестр обновленного Docker-образа автоматически создавалась новая ревизия контейнера:
В Artifact Registry откройте меню загруженного образа и нажмите Создать Container App.
Заполните поля и активируйте опции:
Название контейнера — глобально уникальное имя, на базе которого формируется адрес вашего приложения в домене *.containers.cloud.ru.
Порт контейнера — порт контейнера, который должен совпадать с портом вашего приложения. В этой лабораторной работе используем порт 8080.
vCPU/RAM — количество vCPU и RAM, которые выделяются для каждого экземпляра контейнера при обработке вызова. Выберите минимальную конфигурацию.
Минимальное и максимальное количество экземпляров при масштабировании сервиса. По умолчанию происходит масштабирование с 0, что может вызывать небольшую задержку при старте вашего приложения. Установите минимальное количество экземпляров в значение 0, а максимальное — 1.
Публичный адрес — активируйте опцию, чтобы получить URL-адрес для вызова приложения из интернета.
Автоматическое развертывание — активируйте опцию, чтобы каждый раз после загрузки в Artifact Registry новой версии образа на стороне Container Apps автоматически создавалась новая ревизия контейнера.
Нажмите Создать.
Откроется страница сервиса Container Apps. Контейнер будет запущен в течение нескольких секунд.
Дождитесь, когда контейнер и ревизия перейдут в статус «Выполняется».
Теперь при каждом изменении кода в системе CI/CD обновленный образ будет автоматически отправляться в реестр Artifact Registry, а на стороне Container Apps будет автоматически создаваться новая ревизия контейнера.
Что дальше
Вы научились создавать процесс автоматической сборки и публикации Docker-образа с помощью GitHub, GitLab, GitVerse и Artifact Registry, а также настроили автоматическое развертывание ревизии контейнера из обновленного образа.
В пятой лабораторной работе вы развернете в контейнере Telegram-бота на Python.
для Dev & Test