.net 使用MSDeploy自动迁移数据库

.net 使用MSDeploy自动迁移数据库,.net,sql-server,continuous-integration,msdeploy,webdeploy,.net,Sql Server,Continuous Integration,Msdeploy,Webdeploy,我是一个持续交付迷,我热衷于自动化构建、测试和部署过程。我真正需要帮助的一件事是,在自动化部署中部署数据库迁移脚本时,最佳做法是什么。这些是我的技术堆栈的相关细节 ASP.NET MVC 3网站 VisualStudio2010数据库项目 SQL Server 2008 R2数据库 Windows Server 2008 R2 通过Web Deploy 2.0(MS Deploy)进行远程部署 目前,我能够使用WebDeploy2.0工具部署我们的ASP.NETMVC网站(哇,设置起来很有趣

我是一个持续交付迷,我热衷于自动化构建、测试和部署过程。我真正需要帮助的一件事是,在自动化部署中部署数据库迁移脚本时,最佳做法是什么。这些是我的技术堆栈的相关细节

  • ASP.NET MVC 3网站
  • VisualStudio2010数据库项目
  • SQL Server 2008 R2数据库
  • Windows Server 2008 R2
  • 通过Web Deploy 2.0(MS Deploy)进行远程部署
目前,我能够使用WebDeploy2.0工具部署我们的ASP.NETMVC网站(哇,设置起来很有趣!)。MSDeploy有一个“dbFullSql”提供程序,但它只能用于部署整个数据库,不能用于迁移。MSDeploy为“runCommand”提供程序在远程服务器上执行任意进程的扩展敞开了大门。我想我可以利用它以这种方式执行迁移脚本。然而,我觉得应该有更好的方法来做到这一点

回答时请记住,我希望使用MSDeploy与远程部署目标进行所有交互。虽然如果您知道一种工具,可以用来安全地将迁移推送到非MSDeploy的远程目标,但我也很有兴趣听一听

编辑:一位回答者(删除了他们的答案!)提到了以下文章:

这是一个我不知道的极好的资源。我读过的大部分内容都是这样或那样的,不幸的是,这篇文章重申了我自己的怀疑。本质上,使用当前工具推送自定义增量更新并不容易(vaporware承诺在未来版本中以典型的MS风格提供更好的功能)

在文章主题的注释中,它提到了

。。。建议使用VSDBCMD实现增量数据库 出版

但是,VSDBCMD只能在源和目标之间生成增量脚本,我不相信这些脚本可以进行迁移,尤其是在生产部署中。本文提到的通过Web部署推送增量更新的唯一解决方案是创建包含自定义SQL迁移脚本的自定义WPP目标文件

您可以配置Web Deploy以运行 数据库项目生成,但为了做到这一点,您需要 为web应用程序项目创建自定义WPP目标文件。 这给部署增加了大量的复杂性 过程此外,Web部署不直接支持增量部署 对现有数据库的更新。有关此方法的更多信息, 看


啊!看起来确实很复杂。我以前读过这方面的文章,我希望有更好的方法。目前,我仍然倾向于使用MSDeploy'runCommand'提供程序来执行SQLCMD。

您实际上可以指定一个SQL脚本作为dbFullSql提供程序的“源”(
-source:dbFullSql=“C:\SQLCMD.SQL”
),它只需运行该脚本即可。我以前使用过它来部署一个定制的迁移脚本管理工具,该工具可以生成

我真的希望数据库项目对CD更友好,因为当需要数据库重构时,“自动”功能往往会很快崩溃


参考资料

我只是想澄清一下,我没有删除我自己的答案,其他人删除了,显然认为它离题了。考虑到问题的性质,我并不认为我的回答不恰当,相反,我认为删除答案是不恰当的。@tdykstra:我没有删除它,但根据OP指定MSDeploy作为部署机制,它是离题的。我碰巧相信这是正确的答案,只是可能不是这个问题的正确答案。如果OP愿意,他应该问一个问题,包括可能使用VSDBCMD。我正在寻找一个特定于MSDeploy的解决方案。我不记得tdykstra的答案是什么,但提供的链接确实让我找到了我在问题中提到的自定义WPP目标解决方案。谢谢。这似乎是Ms Deploy 2.0的最佳解决方案。我期待着查看3.0中提到的“代码优先”数据迁移。@seglo-我还没有听说过,但听起来很有希望。有链接吗?我在这里听说Windows Azure web发布支持代码优先迁移。Sayed要么在微软工作,要么和微软的Web部署团队有联系。他参加了很多关于MSDEPLOY的讨论。