Версионирование данных БД в рамках процесса непрерывной поставки. Часть 1
Используя IaС-инструменты, мы можем поднимать и деполитизировать окружения с необходимыми версиями приложений по кнопке. Но ряд приложений помимо изменений кода требуют изменения структуры данных или самих данных в БД. Работать с ручным выполнением миграций в рамках процесса непрерывной поставки неэффективно.
Такой метод не вписывается ни в один из принципов конвейерного подхода поставки ПО
К счастью, для решения этой проблемы есть инструменты. Работая в различных компаниях, я встречал несколько внутренних решений для управления миграциями. Однако большинство из них были ограничены, хотя некоторые из них даже повторяли функционал (идемпотентность, работа с версионированием самих файлов описания миграций) современных систем управления данными БД.
Перед тем, как мы перейдём к инструментам, давайте затронем проблемы, которые они решают:
- Описание миграций в виде кода – в качестве бонуса получаем совместную работу над изменениями, удобный diff изменений DBA review;
- Версионирование самих миграций – каждое изменение имеет свою версию, а на основе содержимого изменений можно организовывать идемпотентные миграции;
- Возможность применять миграции отдельно, перед деплоем приложений, либо самим приложением во время первого запуска после деплоя.
В результате решения вышеописанных задач и построения процесса непрерывной поставки мы можем:
- Обнаруживать и исправлять ошибки быстрее – работа с миграциями в виде кода, ревью и тесты помогут в этом;
- Вносить изменения увереннее и быстрее – один раз пишем сценарии миграции, фиксируем их в системе контроля версий и не заботимся о том, что они будут выполнены иначе, вручную на разных средах;
- Повысить качество внесения кодовых изменений – единый инструмент, единожды описанный код, который выполняется везде одинаково;
- Достичь автоматизации в пользу скорости и качества выполнения изменений.
Инструменты
Определив задачи, проблемы и результат их решения, я бы хотел отметить актуальными на момент публикации этой заметки следующие инструменты для управления данными БД: liquibase, flyway.
Первый появился в 2006 году и начал активно развиваться с появлением flyway. До сих пор оба инструмента актуальны и активно развиваются. Мы не будем затрагивать сравнительную характеристику, учитывая активность развития обоих за последний год. В качестве примера возьмём liquibase, о котором поговорим в следующей заметке.