Статьи

Развертывание SSDT во время локальной сборки и сборки сервера

4 года назад я написал пост о  том, как развернуть VS DB (проект базы данных Visual Studio) на локальном сервере SQL во время локальной сборки.

Как вы, возможно, уже знаете, что новая версия SSDT (SQL Server Data Tool) была выпущена с VS 2012, чтобы заменить обычный проект VS DB, который существовал с VS 2010, и, конечно, развертывание изменилось.

Дополнительную информацию и понимание SSDT см. В этом посте: «
Что нового в TFS 2012?» — SSDT (Инструмент данных SQL Server)

Теперь у нас есть функция под названием «Опубликовать профиль», в которую вы можете поместить все свои настройки в этот файл и затем использовать их для развертывания БД.

Этот пост имеет 2 раздела:

  • Развертывание и публикация SSDT на локальном SQL Server во время локальной сборки
  • Развертывание и публикация SSDT на общем сервере SQL во время сборки TFS

Развертывание и публикация SSDT на локальном SQL Server во время локальной сборки

Если вам нужно работать с SSDT для SQL Server 2014, то вам нужно будет установить последний SSDT, он не включен в VS update 3, скачайте SSDT

SSDT для SQL Server 2014

1. Используя  SqlPublishTask из MSBuild,
я редактирую файл проекта SSDT следующим образом:
местная публикация SSDT

<Target Name="DeployDB" AfterTargets="build" Condition="'$(Configuration)' == 'Local'">
<Message Importance="high" Text="************** Star Deploying DB **************" />
<Message Importance="high" Text="Deploying Project: $(MSBuildProjectDirectory)\$(MSBuildProjectName).sqlproj" />
<Message Importance="high" Text="Deployment Profile: $(MSBuildProjectDirectory)\PublishProfiles\$(MSBuildProjectName).local.publish.xml" />
<MSBuild Projects="$(MSBuildProjectDirectory)\$(MSBuildProjectName).sqlproj" Properties="SqlPublishProfilePath=$(MSBuildProjectDirectory)\PublishProfiles\$(MSBuildProjectName).local.publish.xml" Targets="sqlPublish" />
</Target>

Я использовал некоторые из зарезервированных и  общеизвестных свойств MSBuild, таких как $ (MSBuildProjectName) и $ (MSBuildProjectDirectory), для получения полного списка нажмите эту ссылку

================================================== ==================================

2. Использование командной строки MS Build с SqlPublishTask

MSBuild SqlPublishTask командная строка

msbuild /t:build;publish "C:\TFS Source\Model\Calculator\Calculator.DB\Calculator.DB.sqlproj" /p:SqlPublishProfilePath="C:\TFS Source\Model\Calculator\Calculator.DB\PublishProfiles\Calculator.DB.local.publish.xml"
"$(MSBuildProgramFiles32)\MSBuild\12.0\Bin\msbuild" /t:build;publish "C:\TFS Source\Model\Calculator\Calculator.DB\Calculator.DB.sqlproj" /p:SqlPublishProfilePath="C:\TFS Source\Model\Calculator\Calculator.DB\PublishProfiles\Calculator.DB.local.publish.xml"
  • Если мы запускаем MS Build из-за отсутствия пути к проекту, мы можем использовать относительные пути вместо абсолютных.
  • Чтобы использовать MSBuild без пути, нам нужно открыть командную строку Visual Studio, в противном случае мы можем получить эту ошибку «завершено с кодом 9009», что означает, что он не может найти MSBuild.exe », поэтому мне нужно будет использовать полный путь, и это всегда имеет место при работе с событиями до и после сборки

================================================== ==================================

3. Использование  SqlPackage.exe

SqlPackage.exe — это утилита командной строки, которая автоматизирует некоторые задачи разработки БД

Мы можем вызвать SqlPackage как событие после сборки для проекта SSDT следующим образом:

"$(MSBuildProgramFiles32)\Microsoft SQL Server\110\DAC\bin\sqlpackage" /a:publish /sf:"$(SolutionDir)\$(ProjectName)\$(OutputPath)\Calculator.DB.dacpac" /pr:"$(SolutionDir)\$(ProjectName)\Calculator.DB.local.publish.xml"

Файл .dacpac является выходом сборки sqlproject, так как dll является выходом сборки библиотеки классов
=========================== ================================================== ======

Развертывание и публикация SSDT на общем сервере SQL во время сборки TFS

Есть много способов, и блог команды SSDT создает отличный пост для всех способов, для получения дополнительной информации, нажмите на следующую ссылку:
Проекты базы данных SQL Server и Team Foundation Build

1. Используя  SqlPublishTask из MSBuild,
я отправлю несколько аргументов MDBuild в определении сборки следующим образом:
TFSBuild-SSDT1

/t:Build;Publish /p:SqlPublishProfilePath=../Calculator.DB\PublishProfiles\Calculator.DB.local.publish.xml

Но поскольку в моем решении есть много проектов, не только проект SSDT, что означает, что я создаю файл решения, а не только файл проекта SSDT, это означает, что аргумент сборки будет отправлен каждому файлу проекта в решении, и это приведет к ошибке с одним из Форма Win Win выглядит следующим образом:

Ошибка MSBuild MSB3021: невозможно скопировать файл C: \ Program Files (x86) \ MSBuild \ 12.0 \ bin \ amd64 \ Microsoft.Common.CurrentVersion.targets (4691): не удалось скопировать файл «exe.manifest», поскольку он не был найденный.

Эта ошибка исчезнет, ​​если мы будем собирать только SSDT, конечно, я могу использовать другие способы, такие как SqlPackage.exe с пользовательской сборкой, но так как я это делал в своей локальной сборке, я предпочел быть таким же на сервере сборки, поэтому Я настраиваю сборку следующим образом

SSDT с TFSBuild

Я использовал 2 редактора:

  • Microsoft.TeamFoundation.Build.Controls.BuildProjectListEditor
  • Microsoft.TeamFoundation.Build.Controls.StringListEditor

Что позволяет мне выбирать несколько проектов сборки и несколько профилей публикации, для получения дополнительной информации о редакторах сборки см. Следующий пост:
редакторы сборки TFS и метаданные процесса сборки