MSBuild: автоматизировать сбор сценариев переноса БД? - PullRequest
7 голосов
/ 20 мая 2010

Краткая информация об окружающей среде.

  • Веб-приложение Asp.net (источник хранится в svn)
  • База данных SQL Server. (Схема базы данных (таблицы / sprocs) хранится в SVN)
  • версия базы данных синхронизируется с версией сборки веб-приложения. (хранится в таблице CurrentVersion)
  • CI сервер hudson, который извлекает веб-приложение из репозитория и запускает пользовательский файл msbuild для публикации / упаковки приложения.

Мой скрипт msbuild обновляет версию сборки веб-приложения (Major.Minor.Revision.Build) для каждой сборки. «Редакция» установлена ​​на текущую извлеченную ревизию svn, а «сборка» - на номер сборки hudson (увеличивается при каждой автоматической сборке).

Таким образом, я могу сопоставить приложение с определенной ревизией ствола, а также получить другие статистические данные сборки по номеру сборки Hudson.

Я бы хотел автоматизировать сбор сценариев миграции (обновленных sprocs и т. Д.) Для добавления в zip-пакет. Я полагаю, сравнивая svn-ревизию базы данных, которая еще не развернута, с внедряемой ревизией, я могу определить, какие файлы БД изменились в транке с момента последнего развертывания в этой базе данных / среде.

Этого легко достичь, вручную вызвав команду svn diff -r REVNO:REVNO для вывода списка измененных файлов .sql. Эти файлы затем могут быть вручную добавлены в пакет. Было бы здорово, если бы это можно было автоматизировать.

Во-первых, я бы подумал, что мне нужно написать пользовательское задание, чтобы проверить версию БД, в которой еще не развернута. После этого я совершенно не уверен. Кто-нибудь есть какие-либо предложения о том, как это будет достигнуто с помощью существующей или пользовательской задачи msbuild

Наконец, мне нужно будет автоматически сгенерировать скрипт для добавления в пакет, который обновляет таблицу версий базы данных, чтобы синхронизировать ее с приложением.

Ответы [ 4 ]

4 голосов
/ 21 мая 2010

Интеграция изменений SQL в автоматизированный процесс сборки / развертывания является трудной. Я знаю, потому что я пытался сделать это пару раз с ограниченным успехом. То, что вы пытаетесь сделать, это примерно на правильном пути, но я бы сказал, что на самом деле это слишком сложно. В вашем предложении вы предлагаете собрать конкретные сценарии SQL, которые необходимо применить к вашей БД во время сборки / упаковки. Вместо этого вы должны упаковать все ваши дельта-скрипты (для всей истории вашей базы данных) с вашим проектом и вычислить дельты, которые действительно должны быть применены при развертывании - что Кстати, ваш развертываемый пакет может быть развернут в средах с базами данных разных версий. Для этого нужно выполнить две части:

1) Вам необходимо упаковать свои дельты в развертываемый пакет. Обратите внимание, что вы должны упаковать deltas - не статические файлы, которые создают схему в ее текущем состоянии. Эти дельта-скрипты должны находиться в системе контроля версий. Можно также поддерживать статическую схему в управлении исходным кодом, но вам придется синхронизировать ее с дельтами. На самом деле вы можете использовать такой инструмент, как SQLCompare от Red Gate или версию базы данных VS, для генерации (большинства) дельт из статической схемы. Чтобы добавить дельты в ваш развертываемый пакет и, учитывая, что вы используете svn, вы можете захотеть взглянуть на svn: externals как способ «мягкой ссылки» дельта-скриптов на ваш веб-проект. Затем ваш скрипт сборки может просто скопировать их в ваш развертываемый пакет.

2) Вам нужна система, которая может считывать список дельта-файлов, сравнивать их с существующей базой данных, определять, какие дельты необходимо применить к этой базе данных, а затем применять дельты (и обновлять бухгалтерскую информацию, например, версия базы данных). Есть проект с открытым исходным кодом (спонсируемый ThoughtWorks), который называется dbdeploy , который выполняет это. У меня был некоторый успех с этим инструментом лично.

Удачи - это крепкий орешек (правильно).

2 голосов
/ 20 мая 2010

Посмотрите на проекты баз данных SQL. В VS 2010 они были немного улучшены и имеют встроенные возможности развертывания, которые могут синхронизировать базу данных DEV с другими средами.

Вот несколько хороших ссылок о проектах БД в версии 2010: http://msmvps.com/blogs/deborahk/archive/2010/05/02/vs-2010-database-project-building-and-deployment.aspx

http://weblogs.asp.net/gunnarpeipman/archive/2009/07/29/visual-studio-2010-database-projects.aspx

0 голосов
/ 29 сентября 2016

Доступные сегодня решения для стека .NET / SQL Server:

  • DBUp (с открытым исходным кодом)
  • ReadyRoll (более глубокая интеграция с Visual Studio, автогенерация скриптов)

Последний продукт, который мы активно разрабатываем здесь, в Redgate.

0 голосов
/ 20 мая 2010

Попробуйте SQL Examiner: http://www.sqlaccessories.com/Howto/Version_Control.aspx

Вы можете автоматизировать сбор скриптов с помощью инструмента командной строки SQL Examiner.

...