Post DacPac 中的部署参数

Post deployment parameters in DacPac

我正在通过构建 sql 项目在 TeamCity 中创建 DacPac。生成的 DacPac 有一个 post 部署脚本,我想在部署时或在使用版本号创建它之前对其进行更新。是否可以在 TeamCity 或 DacPac 部署中设置此参数?

sqlpackage.exe命令行看起来像

 C:\Program Files (x86)\Microsoft SQL Server0\DAC\bin\SqlPackage.exe" /Action:Publish /Sourcefile:#{SourceFolder} /TargetDatabaseName:DBName /TargetServerName:#{SqlServer} 

其中“#{}”是章鱼部署服务器上的参数。 SQL 项目中的 post 部署脚本如下所示:

 declare @version varchar(10)
set @version = 'z'
IF EXISTS (SELECT * FROM tVersion)
UPDATE VersionTable SET Version = @version
ELSE
INSERT INTO VersionTable VALUES (@version)

我一直这样做的方法是在 teamcity 上使用文件内容替换器将 'z' 替换为版本号,但这种方法并不理想。如果另一个开发人员使用不符合文件内容替换器构建功能中使用的正则表达式的不同参数签入文件,这可能会在将来导致错误。

您可以采用几种不同的方法,第一种是最简单的方法,因为您在 .sqlproj 中定义了一个 SqlCmd 变量(项目的属性,SQLCMD 变量选项卡)并引用它 post 部署脚本。部署时,您可以使用 /v:variable_name= 覆盖变量(如果您不使用 sqlpackage.exe 进行部署,那么您使用的是什么?Octopus 部署?)。

第二种方法更难,但非常简单,可以使用 .net 包装读取和写入 dacpac api,有一个名为 postdeploy.sql 的流(文件)(打开它作为一个 zip 文件,很明显哪个是 post 部署文件),您可以阅读它,更改您的特定值,然后再写回它。

有关 dacpac 的更多手动编辑,请参阅:

https://github.com/GoEddie/Dacpac-References

埃德