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