Перейти к содержанию

Multi-service репозитории

Hive поддерживает несколько сервисов в одном репозитории. Каждый сервис — это директория со своим .hive.yml.

Структура

my-repo/
  .gitlab-ci.yml              # CI для всего репо
  frontend/
    .hive.yml                  # name: frontend, port: 3000
    src/
      ...
  backend/
    .hive.yml                  # name: backend, port: 8080
    src/
      ...
  worker/
    .hive.yml                  # name: worker, port: 8080
    src/
      ...

Каждый .hive.yml описывает один сервис. Hive автоматически обнаруживает все .hive.yml от корня репозитория.

Обнаружение сервисов

CLI команда hive list показывает все найденные сервисы:

$ hive list
Discovered services:
  frontend   (port: 3000, path: frontend)
  backend    (port: 8080, path: backend)
  worker     (port: 8080, path: worker)

Поиск идёт рекурсивно от корня git-репозитория. Все .hive.yml файлы обнаруживаются автоматически.

Работа с сервисами

Все сервисы (--all)

# Собрать все
hive build --all

# Протестировать все
hive test --all

# Задеплоить все
hive deploy --all

Конкретный сервис (--service)

# Собрать только backend
hive build --service backend

# Задеплоить только frontend
hive deploy --service frontend

Текущий сервис (без флагов)

Без флагов Hive работает с .hive.yml в текущей директории:

cd backend/
hive build    # собирает только backend

Если .hive.yml не найден в текущей директории, CLI ищет вверх до корня репозитория.

Container Registry

В multi-service репозитории каждый сервис получает свой путь в registry:

CI_REGISTRY_IMAGE/frontend    → lab.xmonetize.net:5050/group/project/frontend
CI_REGISTRY_IMAGE/backend     → lab.xmonetize.net:5050/group/project/backend
CI_REGISTRY_IMAGE/worker      → lab.xmonetize.net:5050/group/project/worker

Для single-service репозитория суффикс не добавляется:

CI_REGISTRY_IMAGE             → lab.xmonetize.net:5050/group/project

CI Pipeline

Для multi-service используйте hive ci --global:

hive ci --global

Это генерирует pipeline с отдельными build/test/deploy jobs для каждого сервиса:

build-frontend → test-frontend → deploy-frontend
build-backend  → test-backend  → deploy-backend
build-worker   → test-worker   → deploy-worker

Подробнее — в CI/CD Integration.

Пример: hive-examples

Репозиторий hive-examples содержит три сервиса:

hive-examples/
  .gitlab-ci.yml
  helloworld-go/
    .hive.yml              # name: helloworld-go
    main.go
  helloworld-python/
    .hive.yml              # name: helloworld-python
    app.py
  helloworld-dotnet/
    .hive.yml              # name: helloworld-dotnet
    Program.cs
    helloworld-dotnet.csproj

Каждый деплоится независимо и получает свой URL:

  • https://helloworld-go.hive-examples.knative-staging.svcik.org
  • https://helloworld-python.hive-examples.knative-staging.svcik.org
  • https://helloworld-dotnet.hive-examples.knative-staging.svcik.org