2

为了让我的生活更轻松,目前我们有 4 名开发人员在 Visual Studio 2012 中工作,我们正在使用 TFS 2012 进行源代码控制。我们从事的项目是一个多租户 Web 应用程序(具有多个 db 的单个源目录),它混合了旧版、asp 和 vb6 com 组件,以及新的 C# 代码。我们使用 TFS 进行源代码控制以及管理用户故事和错误。由于我们网站的工作方式,它不能仅在服务器上本地运行或调试。源代码控制当前为每个开发人员设置了一个单独的分支,其工作目录映射到开发服务器上的共享网络路径,该路径在 IIS 中有一个指向它的网站。Dev01-Dev05 等。开发人员在他们的分支中处理项目,使用他们的开发网站对其进行测试,然后将更改签入到他们自己的分支中并将它们合并到主干中。

很长的解释,但基本上每个开发人员都有一个分支和一个站点,然后将它们合并到具有自己站点的主干中。

为了部署我们的登台服务器:

  1. 我通过服务器上的 bat 文件编译了主干的网站
  2. 运行我构建的 Windows 应用程序以查询 TFS 以查找与处于特定状态的特定 WorkItems 关联的变更集,并将这些变更集的所有文件从发布文件夹复制到部署文件夹。
  3. 在服务器上运行另一个 bat 文件以使用 RedGate 的部署管理器从这些新文件创建一个包
  4. 转到我们网络上的 DM 站点以创建和部署该版本(无法让命令行工具为此工作,所以我必须手动完成)
  5. 运行已保存在与每个数据库(大约 10 个客户数据库)上的票号匹配的文件夹中的任何 SQL 脚本以支持发布

我尝试过使用 TFS 自动构建的东西,但从来没有真正得到它来正确构建网站。玩巡航控制也收效甚微。使用混杂的臭鼬工程项目来做到这一点非常耗时且充其量是不可靠的。

我的完美场景是:

  1. 门控签入,每次开发人员合并到主干时尝试构建/发布,如果构建失败则拒绝并通知开发人员。
  2. 一天结束时收集特定状态的 TFS 项目并将与它们关联的文件部署到暂存站点
  3. 在暂存的所有客户数据库中为这些 TFS 项目部署 SQL 脚本
  4. 最终*运行自动化回归 UI 测试,如果失败,创建新的工作项或电子邮件给开发人员
  5. 将 TFS WorkItems 更新为新状态,以便 QA/客户知道他们的项目已准备好在我们的暂存环境中进行测试
  6. 发送成功部署哪些项目的报告

我怎样才能到达这里,这样我就不用花费数小时来准备和部署发布到暂存和最终生产?对潜在的解决方案非常开放,很难改变的东西是我们正在使用的源代码控制,不能真正切换到颠覆或其他东西,所以我们非常坚持使用 TFS。

谢谢

4

2 回答 2

2

回去并开始尝试让 TFS 构建/发布我的 Web 解决方案。我能够成功完成构建。添加 msbuild 参数 /p:DeployOnBuild=True 并将 msbuild 平台设置为 x86 似乎可以解决这个问题。然后我找到了https://github.com/red-gate/deployment-manager-tfs ,它为您提供了一个构建过程模板,可以使用 redgate 工具进行打包和部署。在玩了一会儿之后,我终于得到了它来创建、打包和部署我的构建到我们的暂存环境。

接下来将修改模板以运行一些自定义脚本以仅收集要部署的正确项目,部署所有 sql 文件,然后在完成后将工作项设置为适当的状态。

于 2014-02-17T14:50:22.327 回答
1

非常详细的描述你的过程。感谢分享!

我相信您可以将 TFS 设置为在单个分支上进行门控签入,如果您可以在主干上进行设置,则可以确保合并成功构建。如果您可以使其正常工作或自定义构建作业,那可能会触发 msbuild。

如果您可以使其正常工作,那么您就可以使用该中继代码作为工件发送到部署管理器。这避免了必须通过 TFS 更改集来组装用于部署的文件,因为您确信主干始终可以构建。

您是否使用部署管理器从源代码控制以及应用程序部署数据库?

这可能是进一步自动化该过程的一种方式。 SQL 源代码控制SQL CI允许您对数据库的结构进行源代码控制,在每次签入时保持数据库最新,并运行数据库单元测试。他们还为 Deployment Manager 生成数据库包,因此您可以部署包含应用程序和数据库的版本。

如果您想将您在步骤 4 中使用的命令发送给我,以便使用 Deployment Manager 部署版本,我可以提供帮助。我使用的命令是:

DeploymentManager.exe --create-release --server=http://localhost:81 --project="Project Name" --apiKey=XXXXXXXXXXX--version=1.1
DeploymentManager.exe --deploy-release --server=http://localhost:81 --project="Project Name" --apiKey=XXXXXXXXXXX--version=1.1 --deployto=CI-Environment-Name

这将使用该项目的最新可用包创建发布版本 1.1。您可以选择指定在创建发布时使用的包

--packageversion=<package name>=<version>
--packageversion="application=1.5
于 2014-02-11T10:06:28.030 回答