Skip to content
страница целиком, в Markdown — вставьте в чат с моделью

Обзор деплоя ​

Наша модель деплоя следует стратегии продвижения по веткам: каждая долгоживущая ветка Git напрямую соответствует окружению. GitLab CI обеспечивает сборку и деплой автоматически (или вручную, в случае продакшна), а HashiCorp Nomad оркестрирует работающие сервисы на отдельной виртуальной машине для каждого окружения.

Соответствие веток и окружений ​

ВеткаОкружениеШаблон доменаТриггер
devDevelopmentdev-*.amzhub.aiАвтоматический
stageStagingstage-*.amzhub.aiАвтоматический
mainProduction*.amzhub.aiРучной

Примеры доменов ​

ОкружениеДомен приложенияДомен документации
Devdev.amzhub.aidocs-dev.amztop.io
Stagestage.amzhub.aidocs-stage.amztop.io
Prodamzhub.aidocs.amztop.io

Процесс деплоя ​

mermaid
flowchart LR
    A[Feature Branch] -->|merge| B[dev]
    B -->|auto deploy| C[Dev Environment]
    B -->|merge| D[stage]
    D -->|auto deploy| E[Stage Environment]
    D -->|merge| F[main]
    F -->|manual trigger| G[Production]

    style C fill:#4ade80,color:#000
    style E fill:#facc15,color:#000
    style G fill:#f87171,color:#000

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

Общие шаблоны GitLab CI ​

Все проекты используют общие CI-шаблоны, определяющие стандартные этапы сборки и деплоя. Эти шаблоны обеспечивают единообразие между сервисами и сводят конфигурацию отдельных проектов к минимуму. Типичные этапы пайплайна:

  1. Build — собирает контейнерный образ и отправляет его в registry.amztop.io.
  2. Deploy — обращается к Nomad API напрямую с раннера и запускает джобу в namespace своего окружения.

Один кластер, три namespace ​

Кластер Nomad общий, окружения разделены на уровне namespace: dev, stage, prod. Каждый namespace приколочен к своей виртуальной машине — джоба содержит constraint по атрибуту meta.env, поэтому dev-задача не уедет на прод-ноду.

ОкружениеNamespaceНода
Developmentdev192.168.100.20
Stagingstage192.168.100.30
Productionprod192.168.100.40

Модель продвижения ​

Код движется в одном направлении через окружения:

feature branch --> dev --> stage --> main (prod)

TIP

Никогда не мержьте напрямую в main, минуя stage. Путь продвижения существует для того, чтобы выявлять проблемы до их попадания в продакшн.

WARNING

Деплой в продакшн требует ручного запуска в пайплайне GitLab CI. Одного мержа в main недостаточно для деплоя.

Далее ​

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