Мне трудно было найти хорошие примеры того, как управлять схемами базы данных и данными между серверами разработки, тестирования и производства.
Вот наши настройки. У каждого разработчика есть виртуальная машина с нашим приложением и база данных MySQL. Это их личная песочница, чтобы делать все, что они хотят. В настоящее время разработчики вносят изменения в схему SQL и делают дамп базы данных в текстовый файл, который они фиксируют в SVN.
Мы хотим развернуть сервер разработки с непрерывной интеграцией, на котором всегда будет работать последний принятый код. Если мы сделаем это сейчас, он перезагрузит базу данных из SVN для каждой сборки.
У нас есть тестовый (виртуальный) сервер, который запускает «кандидатов на выпуск». Развертывание на тестовом сервере в настоящее время является очень ручным процессом и обычно включает в себя загрузку последней версии SQL из SVN и ее настройку. Кроме того, данные на тестовом сервере противоречивы. В результате вы получите все тестовые данные, которые последний разработчик зафиксировал на своем сервере-песочнице.
Там, где все рушится, это развертывание в производство. Поскольку мы не можем перезаписать текущие данные тестовыми данными, это предполагает ручное воссоздание всех изменений схемы. Если было большое количество изменений схемы или сценариев преобразования для манипулирования данными, это может стать очень проблематичным.
Если бы проблема была только в схеме, это была бы более простая проблема, но в базе данных есть «базовые» данные, которые также обновляются во время разработки, например метаданные в таблицах безопасности и разрешений. *
Это самый большой барьер, который я вижу при переходе к непрерывной интеграции и пошаговой сборке. Как вы решаете это?
Дополнительный вопрос: как вы отслеживаете версии базы данных, чтобы знать, какие сценарии нужно запустить для обновления данного экземпляра базы данных? Таблица версий, как упоминает Ланс, ниже стандартной процедуры?
Спасибо за ссылку на Тарантино. Я не нахожусь в среде .NET, но нашел их DataBaseChangeMangement wiki page очень полезными. Особенно это PowerPoint Presentation (.ppt)
Я собираюсь написать сценарий Python, который проверяет имена *.sql
сценариев в заданном каталоге по таблице в базе данных и запускает те, которых там нет, по порядку на основе целого числа, которое формирует первое часть имени файла. Если это довольно простое решение, как я подозреваю, оно будет опубликовано здесь.
У меня есть рабочий скрипт для этого. Он обрабатывает инициализацию БД, если она не существует, и запускает сценарии обновления по мере необходимости. Есть также переключатели для очистки существующей базы данных и импорта тестовых данных из файла. В нем около 200 строк, поэтому я не буду его публиковать (хотя, если есть интерес, я могу поместить его в pastebin).