多个客户端的网站部署/管理

时间:2009-06-23 15:27:56

标签: asp.net sql-server deployment

我有一家小企业向客户销售网站解决方案。这些网站的目的相同;允许客户发送和安排短信。

每个网站略有不同。例如,1个站点具有强制信息,例如地址详细信息和组名称,而另一个站点具有不同的要求,例如记录用户的IP地址但不需要任何地址详细信息。

所有网站都是使用LINQ TO SQL构建的,只是网站,而不是网络应用程序。

每个网站都在我的服务器上有自己的数据库。

每个网站都使用exe来发送消息。该exe是相同的exe,但每个网站都有自己的副本和调度过程,位于站点的bin目录中,并使用Windows计划任务触发。

每个网站使用相同的Web服务与发送消息并返回响应的中央服务器进行通信。

客户可以更改ASPX页面,但不能更改后面的代码。

目前,我的开发机器上有一个文件结构,类似于:

Client1Dev Client1_Published

Client2Dev Client2_Published

......等等

另外,还有轮询应用程序(Windows控制台应用程序)

当我进行更改时,我将客户端站点发布到其_Published目录,然后将DLL从bin目录中复制到生产服务器。

我的问题是你会怎么做才能管理这些东西?如果客户端1想要更改,我会对开发站点进行更改,复制到已发布,然后FTP到生产。

在构建新网站时,这是一场噩梦,因为在不同的客户项目中可能会对所有地方进行更改,这可能对新客户有用。

如果我发现了一个错误,那么这是一个真正的噩梦,因为我需要逐个更新所有网站,以确保错误修复不会破坏特定项目。

对此有何建议?

4 个答案:

答案 0 :(得分:1)

源控制,自动化测试。简而言之,就是过程。

您需要有一个主要的开发线,也许每个客户端有一个分支。对客户端分支所做的一些更改希望合并到主分支,然后合并到其他客户端的分支。

您希望通过运行自动化测试来测试这些更改,并且这些测试可能还需要针对不同的客户端进行版本化。

事实上,您可能需要问问自己是否值得努力让客户做出这么多改变。您可能需要限制他们可以进行的更改的数量和种类,以保持您的理智。

答案 1 :(得分:0)

我使用了类似的设置,这是一场噩梦,没有简单的方法。

一种选择是使用svn并为每个客户端分配一个分支,然后您可以跟踪进行更改的位置并将其复制到中央主干和从中央主干复制。这不是“标准分支模式”之一,但我已经看到它使用了很多客户端的庞大代码库,它可以正常工作。这取决于您的客户支付维修费用。

就我个人而言,我认为您最好提供[灵活的CMS] [1]并为每个客户提供单独的数据库和主题。到达那里将是一项繁重的工作,所以你可能想慢慢推出它,但从长远来看会更容易。在内部和开源CMS工作,开源路线似乎有很多好处。

您可以为每个客户端自定义功能提供特定模块,使客户端代码与核心代码完美分离。通过这样做,您可以解决代码维护问题,因为cms代码与客户特定代码是分开的。

我认为其他海报在讨论自动化测试和构建管理时有一个观点,但这是漫长道路的结束,对于小规模的网站,我不知道你是否可以证明这一努力的合理性。

答案 2 :(得分:0)

看看Eric Sink做了源代码控制指南,然后看看Cruise Control.net这样的东西来改进你的构建过程。大多数自动构建工具都可以使用脚本等进行自定义,以便在推出代码之前执行您需要的任何定制步骤。

答案 3 :(得分:0)

很难,但是最小化复杂性的一种方法可能是在源代码存储库中只有一个分支,然后按照SOLID中的说明尝试混合the Open Closed principle。这样就可以在不分支源树的情况下提供客户请求的更改。 我想到的第一个想法是“使用工厂模式”但我已经学会了在看到任何问题之后不会抛出模式的困难方法,但仍然......