Я ищу подходящий рабочий процесс для развертывания SQL Server без каких-либо действий вручную.
У меня есть папка, в которой я описываю, как должна выглядеть база данных SQL Server, под этим я имею в виду файлы .sql, которые создают таблицы, роли и т. д.
На данный момент у нас есть файл .sln, созданный Visual Studio, который не используется ни для каких других целей, кроме создания файла решения .sln, который создает .dacpac, поэтому в идеале я бы хотел от него избавиться.
Я хочу использовать Azure Data Studio для создания файла .sqlproj, содержащего информацию о том, в каких папках содержатся файлы .sql, которые необходимо использовать для создания файла .dacpac, а затем развертывания его в базе данных sql.
Проблема в том, что если вы решите добавить папку с новыми таблицами, вам необходимо пересобрать .sln (или, возможно ли это: запустить сценарии .sql (в виде запросов) к базе данных разработчиков, чтобы их зарегистрировал базу данных, и эти изменения должны быть отражены в файле .sqlproj, когда он будет построен на соответствующем этапе конвейера.)
Конвейер выглядит следующим образом (Сборка и развертывание DACPAC через конвейер Azure DevOps без .sln (или какого-либо артефакта)):
variables:
ARMSvcCnnName: YourAzureResourceManagerServiceConnectionName
AzureSQLServerName: YourAzureSQLSeverName
AzureSQLDBName: YourAzureSQLDBName
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
pool:
vmImage: 'windows-latest'
steps:
- task: VSBuild@1
displayName: 'Build DACPAC from SQL Database Project'
inputs:
solution: '**\*.sqlproj'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: SqlAzureDacpacDeployment@1
displayName: 'Deploy Azure SQL DB'
inputs:
azureSubscription: '$(ARMSvcCnnName)'
AuthenticationType: 'servicePrincipal'
ServerName: '$(AzureSQLServerName).database.windows.net'
DatabaseName: '$(AzureSQLDBName)'
deployType: 'DacpacTask'
DeploymentAction: 'Publish'
DacpacFile: '**\*.dacpac'
AdditionalArguments: '/v:ETLUserPassword = "$(sql-password)" /v:AppUserPassword = "$(sql-password)"'
IpDetectionMethod: 'AutoDetect'
DeleteFirewallRule: false
На этом этапе нам нужно создать решение для получения обновлений, от которых мне хотелось бы избавиться.
Итак, как я это вижу на данный момент:
Допустим, у меня есть пустая база данных, и я создал .sqlproj, используя:
Идеальный способ работы:
Если в файле .sqlproj из вашего локального репозитория произойдет какое-либо изменение, вы можете просто отправить фиксацию изменений в облачный репозиторий Azure, чтобы конвейер сначала загрузил последнюю версию вашего кода из облачного репозитория в агент, а затем собрал ее. версия .sqlproj. Это то, что вас беспокоит в этом посте?
Еще раз привет @ALvin, спасибо за ответ. Я исследовал, можно ли автоматизировать этап сборки проекта БД. Я пожалуй удалю свою тему по твоему комментарию
Привет @Potis23! Я думаю, что совершенно нормально делиться своими вопросами в этом посте, поскольку в нашем сообществе всегда есть пользователи, которые не знакомы с проектом SQL DB и Azure DevOps. Рабочий процесс в запросе просто не рекомендуется и не является лучшей практикой. И на протяжении всего пути к новому исследованию у нас всегда возникают разные вопросы, верно? Удачи вам в путешествии и цените ваше участие и усилия.


Учитывая, что мы новички в использовании проекта SQL DB, советуем НЕ генерировать .sqlproj с помощью конвейеров.
Лучше всего разработчикам внести изменения в .sqlproj, отправив коммиты из локальной рабочей области в облачное репозиторий в качестве исходного кода.
Вместо работы с исходным кодом конвейер должен позаботиться обо всем остальном, то есть построить наш проект базы данных SQL, а затем развернуть сгенерированный артефакт .dacpac в базе данных SQL-сервера Azure.
Привет @Potis23, приятно снова с тобой работать. Но могу ли я узнать, почему вы хотите, чтобы конвейер генерировал
.sqlproj? Как мы уже обсуждали, его следует отправить в облачное репозиторий в качестве исходного кода вашего проекта базы данных SQL для построения конвейера. Могу ли я спросить, какой документ вы используете, чтобы попросить конвейер создать.sqlproj? Разработчики, а не конвейер, должны позаботиться об исходном коде и отправить его в Azure Repos, не так ли?