我正在寻找正确的工作流程来部署 SQL Server,无需任何手动操作。
我有一个文件夹,在其中描述 SQL Server 数据库的外观,我的意思是创建表、角色等的 .sql 文件。
此时,我们有一个由 Visual Studio 生成的 .sln 文件,除了构建解决方案文件 .sln 来构建 .dacpac 之外,该文件没有用于任何其他原因,所以理想情况下,我想摆脱它。
我想使用 Azure Data Studio 生成一个 .sqlproj 文件,其中包含有关哪些文件夹包含需要使用的 .sql 文件的信息,以便构建 .dacpac 文件,然后将其部署到 SQL 数据库。
问题是,如果您决定添加包含新表的文件夹,则需要重新构建 .sln(或者,是否可能:针对开发数据库运行 .sql 脚本(作为查询)以便通过当通过相应的管道步骤构建时,数据库和这些更改将反映在 .sqlproj 文件中。)
管道看起来像这样(通过 Azure DevOps Pipeline 构建和部署 DACPAC,无需 .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:
理想的工作方式:
考虑到我们是新使用 SQL DB 项目,请注意 NOT 使用管道生成
.sqlproj
。
作为更好的实践,开发人员应该通过将本地工作区的提交作为源代码推送到云存储库来引入
.sqlproj
中的更改。
管道不应该处理源代码,而应该处理其余的事情,即构建我们的 SQL DB 项目,然后将生成的
.dacpac
工件部署到 Azure SQL Server DB。