Как вы реализуете стратегию отката (rollback) в CI/CD?

«Как вы реализуете стратегию отката (rollback) в CI/CD?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps откат — это не ручная процедура, а автоматизированный и спланированный процесс восстановления работоспособности системы. Я реализовывал несколько стратегий в зависимости от контекста.

1. Откат развертывания в Kubernetes: Используется встроенный механизм rollout. Каждый деплоймент хранит историю ревизий.

# Быстрый откат к предыдущей версии
kubectl rollout undo deployment/my-app

# Откат к конкретной ревизии (предварительно посмотреть историю)
kubectl rollout history deployment/my-app
kubectl rollout undo deployment/my-app --to-revision=3

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

2. Откат инфраструктуры (Terraform):

  • Через state: Используется версионирование state-файла в удаленном бэкенде (например, S3). При проблемах можно откатить state к предыдущей версии и применить terraform apply.
  • Через код: Стандартный подход — закоммитить и запустить apply предыдущей, рабочей версии кода из Git. Это подчеркивает важность иммутабельности инфраструктуры.

3. Откат релиза в Git (GitOps): При использовании ArgoCD или Flux откат тривиален: нужно просто сделать revert проблемного коммита в Git-репозитории с манифестами. ArgoCD автоматически синхронизирует состояние кластера с предыдущей версией конфигурации.

4. Откат базы данных (наиболее сложный): Требует отдельной стратегии. Я применял:

  • Миграции с откатом: Использовал инструменты вроде Flyway или Liquibase, где каждая миграция имеет обратный скрипт (down).
  • Синие-зеленые деплойменты: Развертывание новой схемы БД параллельно со старой. В случае проблем переключение трафика обратно происходит на старую, неизмененную схему.
  • Резервное копирование/восстановление: Автоматический снепшот БД (например, через AWS RDS snapshot) перед деплоем миграции. В случае провала — быстрое восстановление из снепшота.

Ключевой принцип: Откат должен быть быстрым, предсказуемым и тестируемым. Мы регулярно проводили drills по откату в staging-среде.