【问题标题】:Post deployment parameters in DacPac在 DacPac 中发布部署参数
【发布时间】:2016-05-09 18:46:09
【问题描述】:

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

sqlpackage.exe 命令行的样子

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

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

 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”替换为版本号,但这种方法并不理想。如果另一个开发人员使用不符合文件内容替换器构建功能中使用的正则表达式的不同参数签入文件,这可能会在未来导致错误。

【问题讨论】:

    标签: msbuild teamcity octopus-deploy dacpac sqlpackage


    【解决方案1】:

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

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

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

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

    埃德

    【讨论】:

    • 嗨 Ed,感谢您的建议,我正在使用问题中所述的 sqlpackage.exe。我将试一试 SQLCMD 变量路由,因为第二个选项的最大问题是如何打开 dacpac 并编辑部署后文件。手动将文件编辑为 .zip 然后编辑 postdeploy.sql 很简单,但使用 octopus deploy 似乎会有些困难。澄清一下:“v:variable_name=”如果我把它放在我的 sqlpackage,exe 命令行中,它会在部署时更改变量吗?再次感谢!亚当
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2015-11-26
    • 2015-05-16
    • 2018-03-16
    相关资源
    最近更新 更多