2017-03-15 67 views
0

长时间读者,首次提问者!DACPAC中的非SQL Post部署脚本

我一直在关注我一直在讨论的问题,我们正在为我们的数据库代码部署DACPAC,在新的“DevOps”世界中需要几乎一次点击就完成了。这应该可以在MSI创建的时候完成,但是我推动添加了这个功能,所以我将它保存在DACPAC中,因为我可以控制这一方面。

有谁知道一种方法来执行不是SQL的post/pre部署脚本。理想的PowerShell,但最初我只需要创建文件夹结构并移动一些文件。

出于安全原因,xp_cmdshell不存在问题。

我想过创建一个SQL Agent作业来自动运行PowerShell,然后删除它自己,但我宁愿不通过游说的路线,它似乎太杂乱。

任何意见将不胜感激。

编辑:SQLCMD模式支持

:!! [命令]

例如

:!! MKDIR C:\测试

不幸的Visual Studio不支持SQLCMD的那个水平,从而回到绘图板。

回答

0

我想你可能会稍微看错了一下,而不是让dacpac做别的事情,我们通常做的是有一个部署dacpac然后做x的powershell脚本。

通常有必要在部署过程中,包括在这里我们要运行一些SQL比较之前的预部署前的脚本发生如此的过程是有一个PowerShell脚本:

  • 检查前预先部署脚本并运行它
  • 通过调用sqlpackage或使用DacServices .NET库

在你的情况,你会部署dacpac然后去做别的事情在你的脚本部署dacpac。

无论哪种方式,你总是希望你要到版本控制系统,您使用的参数(如密码或环境的具体的东西,然后他们将参数等),这是有道理的

希望一个脚本来执行部署,你提到的一件事是,它应该是一个点击完成 - 如果这意味着DBA或有人点击dacpac部署那么这是不是DEVOPS :)

埃德

+0

嘿编感谢您的答复,并是的完全同意,我一直是PowerShell的人,所以理想的方式是部署PS与特别的额外脚本。不幸的是,我在一个非常庞大的组织中工作,一些多付的顾问已经引发了一些devops buzz的话,并且他们已经走了一条不允许的路线(他们将它们包装在MSI中)。我在几周前递交了我的通知,因为那些令我沮丧的事情,我只是试图想出一个解决方案,现在比任何事情都更能证明一个问题:)我现在将它发布。 – Ollie

+0

Nevermind我的修复程序在Visual Studio中不起作用,我找到了SQLCMD模式的文档,并且可以使用以下命令运行命令:!! mkdir C:\ Test但是Visual Studio不支持所有SQLCMD功能,未来虽然! – Ollie

+0

如果他们是msi的,你可以在完成后添加一个动作来运行吗?微星有一个MoveFileAction。如果你可以编写代码,你可以编写一个构建执行器,一个.net dll文件,这个文件需要放在相对于执行部署脚本时调用的sqlpackage的特定位置 - 然后你可以做你喜欢的,执行部署之前,期间或之后。说实话,如果你在几个星期内离开,我会记录下每个人的不同方法和好处,留给下一个人去争论/哭泣:)这听起来像是他们会改变它 –