Задать вопрос
stanislav-belichenko
@stanislav-belichenko
Backend PHP Developer

Как автоматически откатить в CI/CD миграции при помощи Goose, если их было несколько?

Ситуация: в разработке приложений и последующей их доставке через CI/CD GitLab'а или других подобных сервисов миграция базы данных зачастую происходит так же автоматически в момент доставки приложения в среду. С самой доставкой вопросов обычно нет, можно использовать любой полюбившийся инструмент. Однако, если мы хотим не только применять, но и отменять миграции, возникает проблема: нужно каким-либо образом запоминать, какие миграции были применены в момент доставки (релиза) приложения в среду, чтобы иметь возможность автоматизированно их отменить.
Представим, что у нас есть релиз, в котором есть код приложения и две новых миграции:
00100_add_table.sql
00101_add_fields_to_table.sql
Применив с помощью практически любого инструмента данные миграции, мы будем довольны результатом.
Однако, как откатить через CI/CD данный релиз и одновременно миграцию? Необходим некий способ понять, что именно было в ней применено. При этом будет лучше, если это не просто количество примененных миграций (здесь это 2).
Я вижу несколько способов:
1. Инструмент миграции должен уметь помечать миграции неким общим тегом.
2. Написать некий инструмент (например с использованием git diff), который будет вычленять из релиза (по сути Merge Request'а) добавленные файлы миграций или хотя бы их количество.
3. Хранить где-то список примененных миграций самостоятельно.
4. Ручной труд.

Вопрос: как именно механизм отката возможно реализовать с помощью Goose в случае Golang в CI/CD? Есть ли примеры, или возможно есть примеры с другим инструментом миграций для Go (либо универсальным)?
  • Вопрос задан
  • 411 просмотров
Подписаться 3 Средний 3 комментария
Пригласить эксперта
Ответы на вопрос 1
liaFcipE
@liaFcipE
1. Делать фулл снепшот данных, если там не гигабайты, особенно на стейджинге - дешево и просто

2. Можно перед релизом запоминать результат goose version и где-то сторить, чтобы при откате сделать goose down-to $DB_VERSION_BEFORE_RELEASE

3. Не сторить, просто делать при откате goose down, откатит на одну версию назад, все зависит от ваших пайплайнов

4. Поменять движок миграций на более функциональный

UPD: goose тоже хранит историю миграций, вы открывали доку?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы