Azure DevOps部署DACpac:用流水线变量替换SQLCMD变量
解决Azure DevOps流水线中用流水线变量替换SQLCMD变量的问题
要在SqlDacpacDeploymentOnMachineGroup@0任务中用流水线变量替换DACpac里的SQLCMD变量,只需在任务中添加SqlCommandVariableValues参数,将流水线变量映射到对应的SQLCMD变量即可。
修改后的流水线YAML
jobs: - job: DeployDatabase displayName: 'Deploy Red and Yellow Databases' pool: '<pool>' variables: MemOptimizedPath: 'H:\SQLData\TestDatabaseMemoryOptimized' steps: - task: DownloadBuildArtifacts@1 inputs: buildType: current downloadType: single artifactName: 'drop' downloadPath: '$(Build.ArtifactStagingDirectory)' - task: SqlDacpacDeploymentOnMachineGroup@0 displayName: 'Deploy Database' inputs: TaskType: dacpac DacpacFile: '**/*.dacpac' TargetMethod: connectionString ConnectionString: '${{ variables.yellowConnectionString }}' # 映射SQLCMD变量与流水线变量 SqlCommandVariableValues: | MemOptimizedPath=$(MemOptimizedPath)
关键说明
- 参数作用:
SqlCommandVariableValues是SqlDacpacDeploymentOnMachineGroup@0任务专门用来传递SQLCMD变量的参数,每行定义一个键值对,格式为SQLCMD变量名=流水线变量值。 - 变量匹配:确保SQL Server项目中定义的SQLCMD变量(比如
$(MemOptimizedPath))和流水线变量名称完全一致,SQLCMD变量默认区分大小写,注意不要写错。 - 多变量处理:如果有多个SQLCMD变量需要替换,直接在参数中添加多行即可,例如:
DbName=$(TargetDbName) LogPath=$(DbLogPath) - 额外检查:部署前确认目标服务器上的
MemOptimizedPath路径存在且部署账号有读写权限,避免因路径问题导致部署失败。
内容的提问来源于stack exchange,提问作者Andy S
相关产品推荐
相关产品推荐

