Как синхронизируются окружения тест и прод
Что проверяют
Понимаете ли вы, что окружения не синхронизируют копированием, а собирают из одних и тех же артефактов и описаний. Следом обычно спрашивают, как вы переносите изменения схемы базы и можно ли залить в тест дамп прода.
Как отвечать
Одинаковость окружений держится на нескольких правилах:
- собрать один раз, развернуть много раз: CI собирает jar и Docker-образ один раз, и на тест, стейджинг и прод едет один и тот же образ, лучше по digest, а не по плавающему тегу
latest. Если под прод пересобирают отдельно, в тесте проверяли другой артефакт; - конфигурация вне артефакта: различия окружений живут в переменных среды, профилях Spring (
application-prod.yml), Kubernetes ConfigMap и Secret, секреты в Vault или его аналоге. Код не знает, где он запущен; - инфраструктура как код: Terraform для облака, один Helm-чарт на все окружения с разными
values. В GitOps-подходе Argo CD или Flux сверяют кластер с репозиторием и показывают дрейф; - схема базы через миграции: Flyway или Liquibase, одни и те же версионные скрипты проходят тест и прод в одном порядке. Spring Boot запускает их при старте, если библиотека есть в зависимостях;
- одинаковые версии инфраструктуры: та же мажорная версия PostgreSQL, Kafka, Redis. В интеграционных тестах Testcontainers поднимает настоящие образы;
- данные отдельно от схемы: прод в тест как есть не копируется. Нужен реалистичный объём, берут обезличенную выгрузку или синтетику, иначе персональные данные окажутся там, где доступ никто не контролирует.
Различия, которые остаются (размеры, число реплик, внешние интеграции в режиме песочницы), лучше перечислить явно, чем делать вид, что их нет.
Где спотыкаются
Правят прод руками. Горячая правка конфига по ssh не попала в репозиторий, окружения разошлись, и следующий деплой молча её затирает.
Тестируют на H2 при PostgreSQL в проде. Диалект, блокировки и типы отличаются, и ошибки находятся только после релиза.
Заливают дамп продовой базы в тест «для достоверности». Реальные телефоны и адреса утекают к подрядчикам и в логи тестовых стендов.