ASP.Net MVC应用程序的自动部署和升级策略

时间:2014-01-21 10:44:55

标签: asp.net asp.net-mvc-4 deployment msbuild build-automation

我正在开发一个ASP.net MVC4项目,其中每天需要将相同的项目部署到许多客户端,每个客户端将拥有自己的域/子域以及单独的应用程序池和db(MSSSQL)。

如果一切顺利,手动执行每个部署至少需要1-2个小时。无论如何使用我可以用自动化的方式做到这一点吗?

此外,我们还需要在发布新版本时更新所有应用程序..可能是同时逐个或全部。但是,手动执行此操作可能需要数周时间,一旦我们有更多客户端,则无法手动执行此更新。

更新涉及,暂停应用程序一段时间,完成文件和数据库的完整备份,更新应用程序文件夹中的应用程序代码/文件,使用脚本升级数据库然后启动应用程序,执行一些诊断脚本以检查更新是否成功与否,如果不是,我们需要检查出了什么问题?

我们如何自动更新此更新?对于如何解决这个问题,任何想法都会很棒。

3 个答案:

答案 0 :(得分:1)

作为BuildMaster的开发人员,我可以说这种情况称为“核心版本”模式,是一种常见的模式。如果您对付费解决方案没问题,则可以在工具中设置完全按照您所描述的方式设置部署计划。

作为一个更具体的例子,我们以稍微不同的方式体验这种确切的情况。 BuildMaster有一组60多个扩展,依赖于特定的SDK版本。在我们最近的4.0版本中,由于SDK中的API更改中断,我们不得不重新部署每个扩展。这基本上相当于拥有一大堆客户并同时部署到他们。我们已经设置了部署计划,以便每当我们创建SDK应用程序的新版本时,我们都可以选择设置一个变量来构建依赖于SDK的每个扩展:

BuildMaster 4.0 SDK

在BuildMaster中,我们的想法是将构建(即不可变对象,通过各种环境,如Dev,Test,Staging,Prod)提升到最终环境(它成为发布的已部署构建)。在您的情况下,这将推动您的MVC应用程序进入其最终环境,然后这将触发所有相关应用程序(即您的客户的应用程序实例)的部署。对于我们的SDK,该计划如下所示:

BuildMaster SDK Release Plan

对于您的场景,您只需要单个操作“Promote Build”。正如我之前提到的,任何家属都会被提升到他们的最终环境,因此一旦在部署期间运行该操作,您的所有客户部署都将启动。例如,我们的Azure扩展最终环境的部署计划如下所示(内部URL已编辑):

Azure Extensions Release Plan

您可能已经注意到这些计划标记为“共享”,这意味着我们拥有的每个扩展都具有完全相同的部署计划,但使用不同的变量来处理名称,路径等较小的差异。

由于这是一个如此巨大的话题,我可以继续使用很长时间,但我认为如果你想尝试它,那对你的用例应该足够了。

答案 1 :(得分:0)

还有其他人,但您可以设置Team Server Foundation来部署自动构建。

http://msdn.microsoft.com/en-us/library/ff650529.aspx

我发现从MVC项目中执行此操作的最简单方法是创建发布配置文件。 这可以通过右键单击选择发布的项目,然后根据需要进行配置来完成。

然后从TFS中创建一个新的构建定义,这将启动向导,引导您完成它。 对于每种情况,有很多选项可能会花费很长时间。

我通常认为最重要的主要变化是设置MSBuild Argument以使用发布配置文件进行部署。 这可以在Process>中找到。高级> MSBuild Arguments。

MsBuild args

正确配置后,这是一个简单的右键单击和排队新构建以构建和部署的情况。 每个部署环境都需要不同的PublishProfile / Build配置。

对于备份,我使用的是powershell脚本,可以手动调用,也可以从TFS调用。 您还在TFS中有一个drop文件夹,可以备份x多个版本。

数据库是通过Sql server自动配置备份的,TBH我没有说明它是一个DB管理员,也参与了发布。

从开发测试方面,我使用jMeter(http://jmeter.apache.org/)运行一些自动脚本,检查用户是否可以登录并查看某些屏幕,只是为了确认没有出现重大错误。但是,通常会有一个测试团队来运行更详细的测试,而不是由我设置。

以上所有内容可能会花一些时间进行设置,但从长远来看,它可以在一年内节省数周的时间。

TFS的免费替代品是http://www.cruisecontrolnet.org/,我过去也使用过它,非常好。

答案 2 :(得分:0)

您可以使用Beanstalk自动化.Net部署,这将为您提供通过单击,监视进度,管理权限和查看部署历史来触发部署的方法。查看本指南的主题:

http://guides.beanstalkapp.com/deployments/deploy-dotnet.html

我希望你会发现它很有用。

P.S。 - 我在Beanstalk工作。