Ответ
Мы используем GitFlow-подобную модель с четким разделением веток для разных сред. Это обеспечивает контролируемый и предсказуемый процесс поставки изменений.
Схема ветвления и деплоя:
-
Контур Development (
dev): Деплой происходит автоматически при пуше или мерже в веткуdevelop. Это основная ветка для интеграции готовых фич и багфиксов. Здесь работает непрерывная интеграция (CI).# Пример правила в GitLab CI/CD deploy:dev: stage: deploy environment: development rules: - if: $CI_COMMIT_BRANCH == "develop" script: - ansible-playbook deploy-dev.yml -
Контур Testing/Staging (
test): Деплой происходит из веток, созданных отdevelopс префиксомrelease/(например,release/1.5.0). В эту ветку сливаются только протестированные и стабилизированные изменения изdevelop. На этом контуре проходит приемочное тестирование (UAT) и проверка сборки перед продакшеном.deploy:staging: stage: deploy environment: staging rules: - if: $CI_COMMIT_BRANCH =~ /^release/.*/ script: - ./deploy-to-staging.sh
Процесс в деталях:
- Разработка ведется в
feature/*ветках, которые мержатся вdevelopчерез Merge Request (MR) после code review. - Для подготовки релиза от
developсоздаетсяrelease/*ветка. Деплой этой ветки на staging запускается вручную или автоматически. - Ветки
release/*защищены от прямых пушей. Все изменения в них вносятся только через MR изdevelop(для хотфиксов) или в обратную сторону (для обратного портирования фиксов). - После успешного тестирования на staging, ветка
release/*мержится вmain/master(деплой в prod) и обратно вdevelop.
Такая модель минимизирует риски, попадающие на тестовый контур, и четко разделяет поток разработки и поток релизов.