Skip to content

Обзор CI/CD

Для непрерывной интеграции и доставки используется GitLab CI/CD. Каждый сервис следует стандартному пайплайну, который собирает Docker-образы, отправляет их в приватный реестр и деплоит в целевое окружение через HashiCorp Nomad.

Ключевые концепции

КонцепцияОписание
Общие шаблоныПереиспользуемые определения CI-задач, поддерживаемые в репозитории meduza/infra. Сервисы наследуют их, а не пишут пайплайны с нуля.
Docker-in-Docker сборкиВсе контейнерные образы собираются внутри CI с помощью docker:24-dind, что обеспечивает воспроизводимость сборок для всех сервисов.
Тегирование по commit SHAКаждый образ тегируется значением $CI_COMMIT_SHORT_SHA, что даёт уникальный, отслеживаемый идентификатор, привязанный к истории Git.
Ветки окруженийИмя ветки определяет целевое окружение: main деплоится в prod, stage — в stage, dev — в dev.
Деплой через NomadПосле успешной сборки пайплайн подключается по SSH к KVM-хосту и отправляет Nomad-задачу с новым тегом образа.

Как CI/CD вписывается в платформу

Разработчик пушит код
        |
        v
  GitLab CI запускается
        |
        v
  Этап сборки (Docker-образ)
        |
        v
  Отправка в gitlab.amzgit.com:5050
        |
        v
  Этап деплоя (nomad job run)
        |
        v
  Сервис работает на KVM-хосте

Пайплайн намеренно сделан простым: сборка, затем деплой. Отдельных этапов тестирования или согласования на уровне CI нет — изоляция окружений обеспечивается таргетированием по веткам.

Централизованные шаблоны

Вся логика пайплайнов находится в meduza/infra в каталоге .gitlab/ci/. Отдельным сервисам нужен лишь минимальный .gitlab-ci.yml, который наследует общие шаблоны и задаёт несколько переменных. Это сохраняет принцип DRY и гарантирует, что все сервисы следуют единому паттерну деплоя.

Структура репозитория

Общие шаблоны, на которые ссылаются все сервисы, находятся по адресу:

meduza/infra/
└── .gitlab/
    └── ci/
        ├── docker-build.yml   # Сборка и отправка Docker-образов
        └── nomad-deploy.yml   # Деплой через Nomad на KVM-хост

Репозиторий каждого сервиса содержит собственный .gitlab-ci.yml, который подключает эти шаблоны:

yaml
include:
  - project: 'meduza/infra'
    file:
      - '.gitlab/ci/docker-build.yml'
      - '.gitlab/ci/nomad-deploy.yml'

Далее

Документация по инфраструктуре