Опишите процесс релиза на вашем предыдущем проекте

Ответ

Релизный процесс был автоматизирован через CI/CD и следовал модели GitFlow.

Основные этапы:

  1. Подготовка:
    • Создание ветки release/vX.Y.Z от develop.
    • Финальное тестирование (smoke, регрессия) на staging-окружении.
    • Проверка чек-листов (миграции БД, конфигурация).
  2. Сборка и деплой:
    • Сборка артефакта и деплой на production через Jenkins/GitLab CI.
    • Постепенный rollout (canary-релиз) на 10%, затем 50%, затем 100% трафика.
  3. Мониторинг и откат:
    • Отслеживание ключевых метрик (ошибки 5xx, latency, бизнес-показатели) в Grafana и Sentry.
    • Готовность к мгновенному rollback через переключение на предыдущий стабильный образ.
  4. Фиксация:
    • После успешного релиза — мерж ветки 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 и риски.

Ответ 18+ 🔞

А, ну это ж классика, блядь! Релизный процесс, который у нас настроен — это не просто так, хуй с горы, а целая наука, ёпта! Автоматизировали всё через CI/CD, по священной модели GitFlow, чтобы не было как в том анекдоте: "задеплоили и помолились". Тут всё чётко, по полочкам, хотя иногда всё равно волнение ебать, как перед выступлением.

Основные этапы, на которых все мозги выносят:

  1. Подготовка, или "собираем чемоданы в ад":

    • От ветки develop отпочковываем release/vX.Y.Z. Это как объявить по радио: "Внимание, началось!"
    • Потом начинается финальное тестирование на staging-окружении. Smoke, регрессия — вся эта хуйня, чтобы убедиться, что мы ничего не сломали. В идеале.
    • И обязательный ритуал — проверка чек-листов. Миграции БД не сожрут ли данные? Конфигурация не наебёт? Всё, сука, перепроверяем.
  2. Сборка и деплой, или "точка невозврата":

    • Джинкс или Гитлаб CI берут наш код, делают из него артефакт и начинают осторожно, как сапёры, закатывать это в продакшен.
    • И не сразу, овердохуища! Канареечный релиз, мать его. Сначала 10% трафика получают новинку. Посмотрели метрики — не горит? Ладно, 50%. Всё ещё живём? Тогда уже 100%, пизда, поехали!
  3. Мониторинг и откат, или "палец на кнопке":

    • Вот тут все сидят и не дышат. Grafana, Sentry — все дашборды открыты. Следим за ошибками 5xx, за латенси, чтобы не упёрлась в потолок. Если бизнес-метрики просели — это пиздец-сигнал.
    • И главное — готовность к откату. Если что-то пошло не так, мы не геройствуем, а сразу, блядь, откатываемся на предыдущий стабильный образ. Быстро и без лишних вопросов. "Лучше живой позор, чем мёртвая красота", как говорится.
  4. Фиксация, или "поставить жирную точку":

    • Если всё прошло гладко и все ещё на рабочих местах, а не под окнами, — фиксируем успех. Мержим ветку 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 — это как ногой лёд проверять, а не прыгать с разбегу. Автоматизированный откат — это чтоб не бегать с криком "откатывай, откатывай!", а тыкнуть одну кнопку. В общем, чтобы спать спокойно. Ну, почти спокойно.