Какую ветку в Git вы используете для деплоя изменений на контуры «dev» и «test» (staging)?

«Какую ветку в Git вы используете для деплоя изменений на контуры «dev» и «test» (staging)?» — вопрос из категории Git, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Мы используем GitFlow-подобную модель с четким разделением веток для разных сред. Это обеспечивает контролируемый и предсказуемый процесс поставки изменений.

Схема ветвления и деплоя:

  1. Контур 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
  2. Контур 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.

Такая модель минимизирует риски, попадающие на тестовый контур, и четко разделяет поток разработки и поток релизов.