【问题标题】:TFS 2010 Build Work Items in a Certain StateTFS 2010 在特定状态下构建工作项
【发布时间】:2013-02-21 11:49:54
【问题描述】:

一段时间以来,我们一直在使用 TFS 2010 来管理工作项和冲刺,并且最近增加了一名专门的 QA 人员。我需要做的是创建一个可以按计划运行的构建定义(例如星期二晚上 9 点),它只会构建和/或部署处于“ReadyToDeploy”状态的工作项.或者一种基于 TFS API 获取要推送的文件列表的方法。

我的最终目标是找到一种方法来自动化发布过程,以便每周仅将通过 QA 的项目发送到我们的暂存环境。然后客户或 QA 可以批准这些项目在作为生产镜像的 staging 中工作,并且另一个流程或构建定义将部署这些将处于不同状态的项目。

我已经修改了工作项和工作流程以完成不同的状态,但是我在获取仅修复的构建或根据工作项的状态推送的所有文件列表时遇到问题。

我对任何想法或解决方案持开放态度,另一种选择是我必须每周管理文件列表并手动推送文件,我正试图摆脱这种情况。

谢谢,

编辑:我们现在的设置方式是,每个开发人员都有自己的分支和自己的网站,我们的软件是基于服务器的,并且必须在特定的服务器上运行。我们的主干链接到主要的开发网站。这是 QA 最初进行测试以将项目移动到准备部署状态的地方。当开发人员准备好进行 QA 时,他们会在分支中签入更改并合并到主干中。目前,构建是从主干创建的。在我们的部署之夜,我在 VS 中打开主干网站并进行发布,然后将这些文件与开发人员提供给我的列表进行比较,并将编译后的文件通过 ftp 传输到我们的生产服务器。

【问题讨论】:

标签: tfs msbuild


【解决方案1】:

我可能是错的,但我不知道如何根据附加工作项的状态告诉构建避免某些变更集。

我认为实现此目的的唯一方法是创建一个Release 分支并每天合并处于“ReadyToDeploy”状态的变更集。合并时,您可以挑选变更集,但它们必须是 contiguous。这意味着您必须执行多次合并才能使Release 分支进入适当的条件。

我们多年来一直在经营类似的东西,它对我们来说效果很好。很多人会告诉你这是不好的做法,而且很可能是这样,但这由你决定。

至于构建自动化,我认为这不是一件容易的事。最困难的部分将是合并。你可能认为不会有冲突,因为它是单向合并,但我已经这样做了很多年,我可以告诉你,确实会出现冲突。

分步说明

  1. trunk 创建一个名为release 的分支
  2. 当您想要进行部署时,从trunk 合并到release,但只选择ReadyToDeploy 变更集。这可能需要多次合并,因为变更集必须是连续的。
  3. 启动发布分支的构建/部署。
  4. 在发布时间表允许的情况下重复第 2 步到第 3 步。

【讨论】:

  • 这就是我所做的。创建了一个名为 Staging 的分支 我编写了一个 Windows 服务,用于从我们的帮助台 (Zendesk) 获取工单,因此我在其中添加了一些功能来查询处于 ReadyToDeploy 状态的所有工作项。从该列表中,我获取所有关联的变更集并将它们保存到列表中,然后按 ID 对它们进行排序。接下来我遍历我的变更集列表并检查 Changes != null 并进行合并。我得到状态并检查冲突并尝试自动解决任何我能解决的问题。如果变更集成功合并到我的暂存分支中,那么我将其签入。
  • 仍然要做,开始构建并检查它是否完成,然后将这些更改复制到登台服务器。同时更新 zen 服务台中的工单,让客户知道该项目正在暂存
【解决方案2】:

你可以做一些自动的事情,这需要大量的编码。它还需要一个分支策略,以便 Dev、Staging 和 Production 都来自它们自己的分支。

  1. 设置使用 TFS API 扫描处于该状态的项目的进程
  2. 使用 API 遍历项目以附加签到
  3. 使用 API 获取最新的源分支和目标分支
  4. 使用 API 通过变更集进行合并(在 #2 中确定)(这很重要,必须处理很多情况,但是合并应该是一种没有冲突的方式,所以可行)
  5. 使用 API 签入
  6. 开始编译构建
  7. 如果编译构建成功启动发布构建

【讨论】:

    【解决方案3】:

    据我所知,这种方法存在一个主要问题。假设您有两个变更集:# 1 和 2。它们都包含对同一文件的修改。现在变更集 #2 包含自己的更改以及来自 #1 的更改。 如果你决定引入变更集 2 并跳过 #1,猜猜会发生什么。您将吸收 #1 的变化。这显然是个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 2011-05-16
      • 2012-01-29
      • 1970-01-01
      • 2012-06-05
      • 2021-05-02
      相关资源
      最近更新 更多