Ответ
Релизный процесс был автоматизирован через CI/CD и следовал модели GitFlow.
Основные этапы:
- Подготовка:
- Создание ветки
release/vX.Y.Zотdevelop. - Финальное тестирование (smoke, регрессия) на staging-окружении.
- Проверка чек-листов (миграции БД, конфигурация).
- Создание ветки
- Сборка и деплой:
- Сборка артефакта и деплой на production через Jenkins/GitLab CI.
- Постепенный rollout (canary-релиз) на 10%, затем 50%, затем 100% трафика.
- Мониторинг и откат:
- Отслеживание ключевых метрик (ошибки 5xx, latency, бизнес-показатели) в Grafana и Sentry.
- Готовность к мгновенному rollback через переключение на предыдущий стабильный образ.
- Фиксация:
- После успешного релиза — мерж ветки
releaseвmainиdevelop. - Создание аннотированного тега (
git tag -a v1.2.0).
- После успешного релиза — мерж ветки
Пример конфигурации стадии в GitLab CI:
release_to_prod:
stage: deploy
rules:
- if: $CI_COMMIT_REF_NAME =~ /^release/vd+.d+.d+$/
script:
- echo "Deploying to production..."
- ./scripts/deploy_prod.sh
environment:
name: production
url: https://app.company.com
Почему так: Постепенный rollout и автоматизированный откат минимизируют downtime и риски.