我是一个持续交付的迷,我对自动化构建,测试和部署过程充满热情。我真正需要帮助的一件事是在自动部署中部署数据库迁移脚本时的最佳做法是什么。这些是我的技术堆栈的相关细节。
目前我能够使用Web Deploy 2.0工具部署我们的ASP.NET MVC网站(哇,设置很有趣!)。 MSDeploy有一个'dbFullSql'提供程序,但这只能用于部署整个数据库,而不能用于迁移。 MSDeploy打开门以进行扩展,使用'runCommand'提供程序在远程服务器上执行任意进程。我想我可以利用它来执行我的迁移脚本。但是,我觉得应该有更好的方法来做到这一点。
回答时请记住,我希望将MSDeploy用于与远程部署目标的所有交互。虽然如果你知道一个可以用来将迁移安全地推送到不是MSDeploy的远程目标的工具,我也有兴趣听到这个!
编辑:回答者(他们删除了他们的答案!)参考了以下文章:http://www.asp.net/web-forms/tutorials/deployment/web-deployment-in-the-enterprise/deploying-database-projects
这是一个我不知道的极好资源。大多数内容我都以某种形式阅读过,不幸的是,这篇特别的文章再次证实了我自己的怀疑。从本质上讲,没有简单的方法可以使用当前工具推送自定义增量更新(在未来的版本中,典型的MS风格的软件承诺可以提供更好的功能)。
在它提到的文章主题的注释中。
...使用VSDBCMD是增量数据库的推荐方法 出版。
然而,VSDBCMD只能在源和目标之间生成增量脚本,我将完全不信任迁移,特别是在生产部署上。本文提到的通过Web Deploy推送增量更新的唯一解决方案是创建一个包含自定义SQL迁移脚本的自定义WPP目标文件。
您可以将Web Deploy配置为运行SQL部署脚本 数据库项目生成,但为了做到这一点,你需要 为Web应用程序项目创建自定义WPP目标文件。 这为部署增加了大量复杂性 处理。此外,Web Deploy不直接支持增量 对现有数据库的更新。有关此方法的更多信息, 见Extending the Web Publishing Pipeline to package database project deployed SQL file。
哎呀!它确实看起来很复杂。我以前读到过这个,我希望有更好的方法。到目前为止,我仍然倾向于执行SQLCMD的MSDeploy'runCommand'提供程序。
答案 0 :(得分:3)
您实际上可以将SQL脚本指定为dbFullSql提供程序(-source:dbfullsql="C:\sqlcmd.sql"
)的“源”,它只会运行该脚本。我之前使用过这个,使用生成的自定义迁移脚本管理工具进行部署。
我确实希望数据库项目对CD更友好,因为当需要db重构时,“自动”内容会快速崩溃。