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 в текущей директории:
Если .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 Pipeline¶
Для multi-service используйте 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.orghttps://helloworld-python.hive-examples.knative-staging.svcik.orghttps://helloworld-dotnet.hive-examples.knative-staging.svcik.org