2013-06-27 27 views
1

您好同事开发者。ALM - 应用程序生命周期管理 - 构建和部署挑战

我困住了一个问题,我可以用一些反馈来以最好的方式解决问题。

该问题围绕源代码管理 - >自动构建 - >部署。基本上是ALM(应用程序生命周期管理)。

我们有一个产品 - 带有MS SQL数据库的ASP.NET Web应用程序。该产品在我们的生产环境中的多个虚拟机上运行数百个具有关联数据库的网站。目前,Web应用程序和数据库正在使用IIS 7和SQL数据库服务器2008 R2的服务器上运行。该产品本身在Team Foundation 2012中受源代码控制。

多年来,该产品的新版本发布多年来一年一次或两次。现在我们将重点关注更频繁的发布,因此我们需要针对该产品的ALM策略。

部署现在的策略:

在版本之间的发展时期,SQL更新脚本已手动创建 - 数据库做出更改脚本被更新每次。当应用程序准备好部署时,它将在开发人员机器上进行编译。包含所有更改的数据库将备份到.BAK文件中。 Web应用程序,.BAK文件和更新SQL脚本将被打包(.zip)并上传到生产环境以供部署。

更新现有运行的产品:

  • 复制/粘贴到目标网站的物理文件夹中的Web应用程序。
  • 更新web.config文件 - connectionstring和应用程序
  • 变量。通过SQL管理工作室运行更新脚本

这将为每位客户完成 - 数百次。

这是一个非常繁琐且容易出错的任务,我根本不喜欢它!

我想要做的是,

  • 源控制数据库作为团队基础数据库项目
  • 自动建立使用Team Foundation 2012 生成服务器的Web应用程序。
  • 将生成服务器的输出部署到生产环境的多个网站 以及自动生成的SQL 针对SQL Server运行的更新脚本。

我一直在使用googling我的屁股 - 只发现关于构建,部署,自动SQL更新脚本等的零碎。

我认为部分正确的方向是源码控制数据库并使用TFS Build Server。我很困惑如何使用TFS Build服务器的输出,以简单和可控的方式进行部署。

理想情况下,我希望TFS构建服务器使用最新版本的Web应用程序,最新版本的数据库,部署后脚本包括自动生成的SQL更新脚本从以前的构建到当前建立。这可以包含在例如一个nuget包。然后,我希望能够创建一个额外的Web应用程序,它应该管理部署 - 目标,版本,iis网站,sql服务器,web.config connectionstrings等。

有没有人有任何建议如何实现这一点?你怎么做到这一点?

回答

1

您可以使用发布管理工具来执行此操作,无需创建其他Web应用程序。

一个这样的例子是来自Red Gate的部署管理器。 (免责声明:我在那里工作。)它具有针对ASP.NET应用程序和SQL Server数据库的内置部署操作。您可以使用命令行工具RgPublish.exe为您的Web应用创建一个包,正如您从TFS Build描述的那样。使用sqlCI.exe命令行和关联的NANT/MSBuild脚本可以为数据库完成相同的操作。

然后可以将相同的包部署到每个服务器。尽管如此,您可能会遇到100多个网站的可扩展性问题。

数据库部署通过自动生成升级脚本来工作,但您可以在首次构建软件包时更改将升级脚本放入软件包的行为。这些分别称为“动态”和“静态”升级方法。