Orbit

Откат развертывания

If a deployment breaks production, you can put an earlier build back in front of traffic in seconds without rebuilding anything. This guide covers how rollback works, how to pick the right…

Если развертывание нарушает работу production, вы можете вернуть более раннюю сборку перед трафиком за считанные секунды без необходимости перестраивать что-либо. Это руководство охватывает, как работает откат, как выбрать правильное развертывание, автоматические откаты, которые может выполнять Orbit, и что делать после отката.

Как работает откат

Orbit хранит упакованный артефакт каждой успешной сборки. Откат не переустанавливает и не перезапускает вашу команду build: он повышает статус артефакта, который уже существует и уже был использован, поэтому завершается за считанные секунды и не может потерпеть неудачу по причинам, которые могут привести к отказу сборки.

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

Откат к предыдущему развертыванию

  1. Откройте проект в Orbit.
  2. Откройте вкладку Deployments.
  3. Найдите последнее развертывание, о котором вы знаете, что оно было работоспособным.
  4. Нажмите Roll back в этой строке и подтвердите.

Подтверждение говорит точно, что произойдет: трафик будет немедленно отправляться из более старой сборки, а текущее развертывание будет вытеснено.

Вкладка Deployments с действием отката

Вы также можете откатиться со страницы деталей развертывания, где кнопка читается Rollback to с коротким хешем коммита.

Восстановленное развертывание получает значок CURRENT. Развертывание, от которого вы откатились, остается в истории со статусом Rolled back.

Откат не является деструктивным и не требует отмены. Ничто не удаляется, история не переписывается, и ваш репозиторий не затрагивается. Ваш следующий успешный push в ветку production становится новой живой версией обычным образом.

Определение правильного развертывания

Каждая строка на вкладке Deployments показывает сообщение коммита и короткий хеш, ветку, статус, когда он развернулся, и кто его отправил. Живое развертывание содержит значок CURRENT.

Обычно вам нужно развертывание сразу же перед тем, которое вызвало проблему. Два вещи помогут вам быть уверенным:

  • Compare. Откройте подозрительное развертывание и нажмите Compare, чтобы сравнить его с предыдущим: время сборки, размер артефакта, состояние кэша, фреймворк и различия артефактов на уровне файлов.
  • Deployment notes. Любое развертывание может содержать заметку объемом до 500 символов. Добавление "hotfix for payment bug" или "feature flag X on" в момент развертывания ничего не стоит и делает историю читаемой месяцы спустя, что как раз когда это нужно.

Откат к артефакту не откатывает переменные окружения, правила перенаправления или заголовки ответов. Они читаются во время запроса или сборки, а не встраиваются в артефакт. Если инцидент был вызван изменением конфигурации, а не изменением кода, откат кода это не исправит. Страница деталей развертывания показывает разницу в переменных, которые были введены во время сборки, в сравнении с текущей конфигурацией, что является самым быстрым способом различить эти два случая.

Автоматический откат

Orbit может сделать это для вас раньше, чем вы это заметите. Все три параметра находятся в Settings.

Auto-Rollback On Failure

В разделе Runtime включите Auto-rollback on failure. Если production развертывание потерпит неудачу, последнее здоровое развертывание автоматически восстанавливается и посетители не видят никакого простоя. Staging имеет собственный эквивалентный переключатель.

Health Check

В разделе Health check установите Health check path, например / или /api/health. После каждого production развертывания Orbit получает доступ к этому пути. Если он не возвращает ответ 2xx в течение 15 секунд, восстанавливается предыдущее здоровое развертывание.

Smoke Tests

В разделе Smoke tests перечислите до 10 путей, разделенных запятыми, например /,/blog,/api/health. После каждого успешного развертывания Orbit отправляет GET к каждому и записывает успех или неудачу. Если какой-либо из них потерпит неудачу и автоматический откат включен, восстанавливается предыдущее развертывание. Результат отображается на странице развертывания как Smoke tests passed или количество неудач, и говорит Triggered rollback, когда это вызвало откат.

Проверка здоровья на маршруте, который действительно использует вашу базу данных, стоит намного больше, чем на главной странице. Поврежденное развертывание, которое все еще обслуживает кэшированную главную страницу, пройдет проверку / и потерпит неудачу на реальной.

Откат в сравнении с блокировкой развертывания

Если вы не готовы откатиться, но хотите остановить появление новых версий в production во время расследования, вместо этого заблокируйте развертывания:

  1. Откройте проект.
  2. Нажмите Lock deploys.
  3. Добавьте причину, например "investigating production issue".

Развертывания, запускаемые push, затем молча пропускаются, и баннер читает Production deploys are locked с вашей причиной. Ручные развертывания по-прежнему работают, что намеренно: блокировка останавливает случайные развертывания, а не исправление, которое вы отправляете. Нажмите Unlock deploys, чтобы снять блокировку.

Блокировка и откат хорошо работают вместе. Сначала откатитесь для восстановления сервиса, затем заблокируйте, чтобы рутинное слияние никого не отменило откат, пока вы диагностируете.

Продвижение Staging в Production

Если вы запускаете staging окружение, вы можете поместить протестированную staging сборку в production без отправки чего-либо.

  1. Откройте обзор проекта и найдите раздел Staging.
  2. Если staging впереди production, появляется Promote to production.
  3. Нажмите его и подтвердите.

Внимательно прочитайте подтверждение, потому что в Orbit есть два различных поведения продвижения и они не взаимозаменяемы. Продвижение с обзора проекта запускает свежую production сборку с тем же коммитом, используя production переменные окружения и production команды сборки. Staging артефакт не переиспользуется. Продвижение конкретного staging развертывания со страницы его деталей ясно говорит, что staging сборка становится живой немедленно без перестройки. Если ваши staging и production переменные окружения отличаются, первый путь произведет другой артефакт, чем тот, который вы тестировали.

Orbit также может продвинуть для вас. Auto-promote staging в Settings продвигает staging в production после нескольких часов здоровой staging сборки с пройденными smoke тестами, проверяется каждые 15 минут.

После отката

Исправьте основную проблему в вашем репозитории и отправьте новый коммит. Это запускает нормальную сборку, которая становится новой живой версией. Если вы заблокировали развертывания, сначала разблокируйте их, или push будет пропущен.

Вкладка Activity проекта записывает откат вместе со всем остальным, что произошло, поэтому есть журнал аудита того, кто откатился, что откатил и когда.

Что ограничивает, как далеко вы можете откатиться назад

Откату нужно существование артефакта. Два параметра это контролируют:

  • История развертывания вашего плана: 7 дней на Launch, 30 на Liftoff, 90 на Apex.
  • Параметр проекта Artifact retention, который сохраняет количество успешных артефактов на каждое окружение, от 10 до 500, по умолчанию 50.

Артефакт текущего живого развертывания всегда сохраняется независимо от любого из них.

Если вы развертываете много раз в день, предел количества артефактов - это то, что вы попадете в первое, а не предел по дням. Пятьдесят развертываний могут быть одной неделей. Увеличьте Artifact retention вместо того, чтобы обнаружить потолок во время инцидента.

Связанное чтение

Вам всё ещё нужна помощь?

Напишите нам на support@kapsulehost.com или откройте чат в KPanel.

Открыть KPanel
Откат развертывания