Asp.net mvc 部署具有突破性更改的SSDT和web应用程序

Asp.net mvc 部署具有突破性更改的SSDT和web应用程序,asp.net-mvc,deployment,continuous-integration,sql-server-data-tools,Asp.net Mvc,Deployment,Continuous Integration,Sql Server Data Tools,我只是想知道以前是否有人遇到过这个问题 为了简单起见,我们有两个项目 SSDT项目 ASP.net MVC应用程序 两者都托管在AWS上,MVC应用程序通过50%的实例部署实现负载平衡 通过CI服务器单独部署这些应用程序可能会导致一个计时窗口,如果SSDT部署中出现中断模式更改,则该时间窗口可能会导致应用程序中断 一个新的NOTNULL列被添加到表中,用户仍在使用旧版本的web应用程序,它可能会中断,因为表需要一个值 反之,web应用程序已更新,但尝试将数据插入该列,但表中尚不存在 解决此问

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

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

  • SSDT项目
  • ASP.net MVC应用程序
两者都托管在AWS上,MVC应用程序通过50%的实例部署实现负载平衡

通过CI服务器单独部署这些应用程序可能会导致一个计时窗口,如果SSDT部署中出现中断模式更改,则该时间窗口可能会导致应用程序中断

一个新的NOTNULL列被添加到表中,用户仍在使用旧版本的web应用程序,它可能会中断,因为表需要一个值

反之,web应用程序已更新,但尝试将数据插入该列,但表中尚不存在

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

我曾在一个类似的网站上工作过,我们将db单独部署到该网站-因此更改将遵循此模式

更改数据库以包含新代码,确保其向后兼容,以便

-部署新进程,而不是修改旧进程或添加默认参数等 -表的显著变化意味着新的名称和视图的到位,以复制旧的结构

部署DB更改,然后部署web站点,在将来的部署中整理并返回到您实际想要的状态

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

它还需要纪律,以确保您删除中间代码,并实际更新网站,但这一切都是可行的

看看这个,它基本上讨论了存在哪些挑战:

祝你好运-当你这么做的时候感觉很棒,因为你真的可以转移到一个连续的部署模型