1

我遇到了一个问题,我可以使用一些反馈以最好的方式解决它。

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

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

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

现在的部署策略:

在两个版本之间的开发期间,手动创建了 SQL 更新脚本——每次更改数据库时都会更新一个脚本。当应用程序准备好部署时,它会在开发人员机器上编译。使用所有更改的数据库将备份到 .BAK 文件中。Web 应用程序、.BAK 文件和更新 SQL 脚本将被打包 (.zip) 并上传到准备部署的生产环境。

更新现有的运行产品:

  • 将 Web 应用程序复制/粘贴到目标网站的物理文件夹中。
  • 更新 web.config 文件——连接字符串和应用程序
  • 变量。通过 SQL Management Studio 运行更新脚本

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

这是一项非常乏味且容易出错的任务,我一点也不喜欢!

我想做的是;

  • 源代码控制数据库作为 Team Foundation 中的数据库项目
  • 使用 Team Foundation 2012 Build Server 自动构建 Web 应用程序。
  • 将 Build Server 的输出部署到生产环境的多个网站,同时自动生成针对 SQL Server 运行的 SQL 更新脚本。

我一直在谷歌上搜索——只找到关于构建、部署、自动 SQL 更新脚本等的点点滴滴。

我认为部分正确的方向是对数据库进行源代码控制并使用 TFS 构建服务器。我对如何使用 TFS 构建服务器的输出以一种简单且受控的方式进行部署本身感到非常困惑。

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

有人对如何实现这一目标有任何建议吗?你怎么做到这一点?

4

1 回答 1

1

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

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

然后可以将相同的包部署到您的每个服务器。不过,您可能会遇到数百个网站的可扩展性问题。

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

于 2013-07-09T09:01:54.290 回答