我的公司为房地产机构构建了一个web应用程序--最初是用经典的ASP编写的,向.NET进行了增量迁移。本质上,它是一个带有后端DB的网站,与自定义的windows服务/dll混合在一起。.NET应用程序非常标准。
在我过去的公司里,我们有一个传统的软件设计生命周期。我们构建了产品的版本,当我们发布时,所有客户都收到了相同的代码。我们的工程团队对产品需求进行了过滤,并将其发送到QA进行本地阶段环境的测试,然后推送到生产中。
本公司为多个客户提供多种版本的产品。基本上,客户A可以在版本1.5,客户B在1.6,客户C在2.0。我们这样做是因为使用我们应用程序的机构对任何影响其用户的更改都有严格的要求。如果一个客户对版本1.5很满意,他们就会呆在那里,尽管2.0版掌握了所有最新的消息。客户实际上是在推迟升级,因为新的“功能”会造成混乱,从而损害了用户的基础。
当你很小的时候,支持这种类型的生命周期是很好的,但是随着你成长到几十个或数百个客户,这对我们的DEV,DBA,QA,更不用说我们的支持团队来说是一个压力。现在我们所处的情况是,我们每周只能安排6-8个站点,这些站点可以随着需求的增加而更新。这迫使我们让其他网站等待2-4个月才能在他们的网站上得到更小的更新。任何需要立即关注的生产问题或错误都会使事情变得更加混乱--因为一个已经计划好接受更新的站点需要被取消优先级以腾出时间。
很抱歉这么长时间,但是任何帮助都是非常感谢的。我们越早做出一些改变,让我们有一个更好的发布计划,越好。谢谢!
发布于 2010-11-17 01:24:42
事实证明,我的工作环境完全一样。我们的系统设置如下:
clientsite (or vdir)
/appname_vdir
客户端站点根文件夹包含具有任何非数据库驱动客户端特定设置(例如连接字符串)的web.config文件。当我们将/appname_vdir
指向一个新版本文件夹时,我们不必担心更新连接字符串或任何其他特定于客户端的数据。让这变得困难的是,每个更改都是根据每个客户是否希望以相同的方式进行更改来评估的。如果没有,那么就必须有一种方法来禁用(或不安装)该更改。
理想情况下,您希望承载尽可能多的客户端,因为您可以构建自动化或控制将客户端指向更新版本和执行数据库更新过程的工具。
在某种程度上,我们的计划是构建一种机制,让管理员得到新版本可用的通知。如果它们位于我们的托管环境中,更新将涉及更改适当的虚拟目录路径。如果他们是自己的主机,它将提供一种方式来下载比特,然后进行路径更改。我们还没来得及建造那部分。此外,还可以构建一个管理工具,让支持人员更新人员并确定他们使用的版本。
发布于 2010-11-17 01:03:19
在我看来,你有两个选择:
你自己主持
我想你可以这样做:
的重写规则。
请注意,这里我缺少一些细节,因为我对您的设置不太了解,比如每个客户端都在使用自己的数据库,还是您有一个多租户的方法?它们都是使用单独的产品安装,还是使用相同的安装实例,只是获取不同的数据?
客户端托管
这可以是相对直接的管理。您可以将应用程序的ASP.NET部分打包到MSI安装程序中,创建虚拟目录和应用程序池等都可以在MSI中完成。然后,您可以使用像DBGhost这样的数据库升级工具打包数据库--它获取模板(源)数据库,将其与目标进行比较,然后生成使目标与源一致所需的DDL。我知道VS2010的一个版本中也包含了一个工具,但是我没有使用它,也不能对它进行评论。
您的开发人员可以通过向支持团队提供易于使用的方式来帮助减轻升级带来的痛苦。尽可能使用MSI包。尽可能使用工业实力数据库创建/生成工具。如果您由于某种原因不能使用数据库升级工具,那么请确保数据库升级是以良好的方式编写的(即,如果存在对象,则更改object )。如果必要的话,强制执行必须遵循的升级路径--如果客户想从1.6跳到2.0,那么必须先通过1.8 --这使得升级变得更细、更可预测、更易于管理(您维护的升级脚本为1.6->1.8和1.8->2.0,1.6->2.0不必有升级脚本)。
我希望这给你足够的思考-如果你有更多的细节,然后编辑你的帖子,并添加他们。
发布于 2010-12-07 12:42:11
您考虑过自动化应用程序的更新和部署吗?如果您能够想出一种标准化的方法来打包应用程序,而不管版本如何,那么使用像Nolio (http://www.noliosoft.com)这样的工具就很容易实现自动化。这将使您能够创建每个版本甚至每个帐户的部署过程,并启用“几乎相同”的部署,在这些部署中,差异可以作为每个部署的输入输入。
https://stackoverflow.com/questions/4200324
复制相似问题