如何配置Azure CI/CD构建含2个sqlproj的方案并部署数据库
解决Azure CI/CD流水线缺失数据库构建文件的方案
一、修改现有构建流水线生成所需文件
当前构建仅处理了不含sqlproj的Test.sln,完全没涉及包含数据库项目的Test-db.sln,需要添加以下任务来生成部署依赖的test-dbproj.dacpac和test_database_dbproj.publish.xml:
1. 还原数据库解决方案的NuGet依赖
在现有「Nuget Restore」任务之后,新增一个任务处理数据库方案的依赖:
- task: NuGetCommand@2 displayName: 'Nuget Restore Database Solution' inputs: command: 'restore' restoreSolution: '**/Test-db.sln' feedsToUse: 'select'
2. 构建数据库项目输出目标文件
在Web项目的MSBuild任务之后,添加MSBuild任务构建Test-db.sln,把生成的文件直接放到发布所需的DB目录:
- task: MSBuild@1 displayName: 'Build Database Projects' inputs: solution: '**/Test-db.sln' configuration: '${{ parameters.buildConfiguration }}' msbuildArguments: > /T:Build /p:OutputPath=$(build.artifactstagingdirectory)\DB /p:GenerateDacPac=True /p:PublishProfileDir=$(build.artifactstagingdirectory)\DB
补充说明:
/p:GenerateDacPac=True确保强制生成DACPAC文件;/p:PublishProfileDir会自动把项目内的.publish.xml发布配置文件复制到指定目录;
如果你的test_database_dbproj.publish.xml是项目外的自定义文件,得再加个CopyFiles@2任务把它复制到$(build.artifactstagingdirectory)\DB。
3. 确认发布工件包含DB目录
现有PublishBuildArtifacts@1任务已经会发布$(Build.ArtifactStagingDirectory)下所有内容,新增的DB文件夹会自动被包含,无需修改这个任务。
二、其他可行的数据库部署方案
除了生成DACPAC后手动调用sqlpackage.exe部署,还有几种更简便的替代方案:
1. 用Azure官方数据库部署任务替代sqlpackage.exe
Azure DevOps的AzureSQLDatabaseDeployment@1任务封装了sqlpackage.exe的逻辑,直接用它部署更省心:
- task: AzureSQLDatabaseDeployment@1 displayName: 'Deploy Database to Target Server' inputs: azureSubscription: '<你的Azure服务连接名称>' ServerName: '<目标SQL服务器名称>' DatabaseName: '<目标数据库名称>' SqlUsername: '<SQL登录用户名>' SqlPassword: '<SQL登录密码>' DacpacFile: '$(System.artifactsdirectory)\Test-YAML\drop\DB\test-dbproj.dacpac' PublishProfile: '$(System.artifactsdirectory)\Test-YAML\drop\DB\test_database_dbproj.publish.xml'
2. 生成SQL脚本部署
如果不想用DACPAC,构建时可以直接生成部署用的SQL脚本,部署阶段执行脚本即可:
- 构建数据库项目时加参数生成脚本:
msbuildArguments: > /T:Build /p:OutputPath=$(build.artifactstagingdirectory)\DB /p:GenerateSqlScript=True /p:SqlScriptPath=$(build.artifactstagingdirectory)\DB\deploy.sql
- 部署时用
SqlAzureDacpacDeployment@1或PowerShell任务执行这个SQL脚本。
3. 合并解决方案
如果能调整代码结构,把Test-db.sln里的sqlproj加到Test.sln中,这样一次NuGet还原和MSBuild就能同时生成Web和数据库文件,减少任务数量。
内容的提问来源于stack exchange,提问作者user3497702
相关产品推荐
相关产品推荐

