Как включить мою базу данных в процесс непрерывной интеграции?
Вопрос
Извините, сегодня я впервые пытаюсь настроить среду CI с помощью TeamCity.Я разрабатываю серверное приложение ASP.NET/Sql и пока все хорошо.MSBuild — мой поставщик.
Я хотел бы знать, какие есть варианты автоматической загрузки изменений в мою локальную базу данных на тестовый сервер в рамках процесса интеграции.Теперь я не слишком уверен, что хочу идти в направлении DBGhost для автоматической синхронизации изменений схемы, я был бы рад просто заменить базу данных на тестовом сервере копией моей локальной базы данных.
Какие у меня здесь варианты?
редактировать:дальнейшее исследование показывает, что продукты RedGate SQL подходят для этой цели.Хотя они недешевы.У них есть хороший технический документ по использованию своих продуктов в процессе непрерывной интеграции: http://downloads.red-gate.com/HelpPDF/ContinousIntegrationForDatabasesUsingRedGateSQLTools.pdf
Решение
Прежде всего, я считаю, что ваша база данных должна быть включена в вашу стратегию контроля версий.Основные принципы достижения этой цели были прекрасно изложены в К.сериал Скотт Аллен.Вы также можете проверить Эволюционный дизайн базы данных Мартина Фаулера.А для получения более практической информации ознакомьтесь с ответами на Как вам следует построить свою базу данных с помощью системы контроля версий?.
Как я писал в мой ответ, Я поддерживаю два набора скриптов:один набор, который может создать базу данных с нуля, и другой, который может обновить данную базу данных с одной версии до последней.В рамках стратегии CI:
- Базу данных на CI-сервере следует перестроить с нуля с помощью этих скриптов.Затем вы можете проверить, что ваши скрипты находятся в рабочем состоянии.
- В идеальном мире я должен иметь возможность выполнить обновление базы данных с версии N-1 до версии N и сравнить полученную схему со схемой предыдущей базы данных.Я все еще работаю над этим...
- Тестовые данные должны быть введены в базу данных, что позволит выполнить модульное тестирование вашего приложения (вы можете использовать BCP для этого).