我遇到了一个问题,我可以使用一些反馈以最好的方式解决它。
问题围绕源代码控制 -> 自动构建 -> 部署。基本上是 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 连接字符串等。
有人对如何实现这一目标有任何建议吗?你怎么做到这一点?