使用重大变更部署SSDT和Web应用程序

时间:2015-08-19 22:12:49

标签: asp.net-mvc deployment continuous-integration sql-server-data-tools

我只是想知道是否有人之前遇到过这个问题。

为简单起见,我们有2个项目

  • SSDT项目
  • ASP.net MVC app

两者都托管在AWS上,MVC应用程序通过50%实例部署进行负载平衡。

单独通过CI服务器部署这些应用程序可能会导致计时窗口,如果SSDT部署中的架构发生更改,可能会导致应用程序中断。

新的Not Null列被添加到表中,用户仍在使用旧版本的Web应用程序,并且它可能会因为表需要一个值而中断。

或者相反,Web应用已更新但尝试将数据插入该列但尚未存在于表中。

解决此问题的一种可能方法是创建列以允许空值,部署SSDT更改,部署Web应用程序,在SSDT中将列更改为非null,然后重新部署SSDT。 不幸的是,这个过程是一个手动过程。

1 个答案:

答案 0 :(得分:3)

我曾经在一个类似于此的网站上工作,我们将数据库单独部署到网站 - 所以更改将遵循这种模式......

更改数据库以包含新代码,确保它向后兼容所以......

- 部署新的proc而不是修改旧的proc或添加默认参数等     - 显着改变表意味着新名称和放置视图以复制旧结构

部署数据库更改,然后部署网站,在将来的部署中整理并返回到您实际想要进入的状态。

这听起来像是浪费时间,但实际上所有这意味着每次迭代都会整理上一次迭代中的一些部分,并将它们包含在下一个版本中。

确保删除中间代码并实际更新网站也需要遵守纪律,但这一切都是可行的。

看看这个,基本上讨论了有哪些挑战:

https://www.simple-talk.com/sql/database-delivery/non-breaking-online-database-deployments/

祝你好运 - 当你这样做时,感觉非常棒,因为你可以真正转向持续部署模式。