Как реализовать Continuous Delivery приложения с реляционной СУБД?
Привет всем,
я работаю над приложением - rest api написанное на java (DropWizard), которое хранит всю информацию в MySQL Базе данных. Конкретный список технологий тут наверно не имеет значения. Но тем не менее.
Я сейчас занимаюсь вопросом автоматизации: continuous integration и delivery. И в общем-то с автоматизацией билдов проблем нет - я решил использовать Team City, который при пуше в определенную ветку будет собирать билд, прогонять тесты и выкладывать на продакшн (ну примерно так).
Но вот проблему обновления базы данных мне пока решить не удалось. Допустим очередное обновление сервиса - добавлена новая функциональность: пользователь теперь может указывать несколько телефонов. Для этого помимо изменений в коде надо изменить схему БД.
Как это все автоматизировать? Надо ли мне заводить какой-то специальный репозиторий, где будут храниться SQL скрипты и при пуше, эти скрипты будут запускаться? Что делать потом? как синхронизировать эти два репозитория? Допустим, я изменил функциональность - я сразу коммичу в два репозитория, и потом Team City сначала запускает скрипты на обновление БД, а потом собственно собирает билд новый приложения?
В общем, буду рад любым советам и личному опыту. У меня пока в голове никаких толковых мыслей. Неужели все-таки ручками что-то нужно делать?
во многих статьях на эту тему я увидел требование: no downtime - то есть приложение и БД на продакшене должны быть живыми постоянно. В моем случае такого требования нет - я могу позволить допустим 1 час на вещи вроде обновления production code и БД.