Назад к вопросам
Aston
Middle
6
GitLab CI/CD: три репозитория (Front, Back, DB). Разработчик создал ветку во фронте — нужно автоматически поднять фича-стенд со всеми тремя сервисами, после мержа стенд удаляется. Как реализовать в GitLab CI?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Для реализации автоматического поднятия фича-стенда с тремя сервисами (Front, Back, DB) в GitLab CI можно использовать следующий подход:
-
Монорепозиторий или мульти-проектная интеграция:
- В каждом репозитории (Front, Back, DB) настроить
.gitlab-ci.ymlс возможностью триггера пайплайнов в других репозиториях.
- В каждом репозитории (Front, Back, DB) настроить
-
Создание динамического окружения:
- При создании ветки во фронте запускается пайплайн, который:
- Клонирует или запускает сборку всех трёх сервисов (например, через Docker Compose или Kubernetes).
- Создаёт уникальное окружение (например, feature/branch-name).
- Разворачивает все сервисы с конфигурацией для этого окружения.
- При создании ветки во фронте запускается пайплайн, который:
-
Удаление окружения после мержа:
- Настроить в GitLab правило, которое при слиянии ветки в основную (например, master/main) запускает пайплайн с задачей удаления соответствующего feature-окружения.
-
Пример упрощённого
.gitlab-ci.ymlдля Front:
stages:
- deploy
- cleanup
deploy_feature:
stage: deploy
script:
- echo "Deploying feature environment for $CI_COMMIT_REF_NAME"
- docker-compose -f docker-compose.feature.yml up -d
environment:
name: feature/$CI_COMMIT_REF_NAME
url: http://feature-$CI_COMMIT_REF_NAME.example.com
only:
- branches
except:
- main
cleanup_feature:
stage: cleanup
script:
- echo "Cleaning up feature environment for $CI_COMMIT_REF_NAME"
- docker-compose -f docker-compose.feature.yml down
environment:
name: feature/$CI_COMMIT_REF_NAME
action: stop
only:
- main
when: manual
- Кросс-репозиторный триггер:
- Можно использовать GitLab Triggers или Multi-project pipelines, чтобы при деплое фронта запускать сборку и деплой бэка и базы.
Таким образом, при создании ветки во фронте автоматически поднимается полный стек, а после мержа — удаляется.