2013-03-06 76 views
1

我们一直在使用TFS 2010来管理工作项目和冲刺,并且最近添加了专门的QA人员。我需要做的是创建一个构建定义,我可以定期运行(例如星期二下午9点),这样只会构建和/或部署处于“ReadyToDeploy”状态的工作项目。或者一种获取基于TFS API推送的文件列表的方式。TFS 2010在某个州建立工作项目

我的最终目标是让发布过程自动化,以便只有通过质量检查的项目才会每周发送到我们的临时环境。然后,客户或质量检查人员可以批准这些项目在分级中工作,这是生产的镜像,而另一个流程或构建定义将部署那些处于不同状态的项目。

我已经修改了工作项目和工作流程以完成不同的状态,但是我遇到了一个问题,要么根据工作项目的状态获取修正或生成所有文件的列表。

我愿意为此提供任何想法或解决方案,另一种方法是我必须每周管理文件列表并手动推送文件,并试图摆脱这种情况。

感谢,

编辑:我们把它设置现在的方式是,每个开发者都有自己的分公司和自己的网站,我们的软件是基于服务器的,必须在特定服务器上运行。我们的中继链接到主开发网站。这是QA最初进行测试以将项目移动到准备部署状态的地方。当开发人员准备好QA时,他们检查他们在分支中的变化并合并到主干中。这些版本是目前从后备箱中创建的。在我们的部署之夜,我打开VS中的trunk网站并进行发布,然后将这些文件与开发人员给我的列表进行比较,并将编译后的文件ftp到我们的生产服务器。

+1

我想你必须让开发者只将这些工作项目合并到另一个建立的分支中。自动合并X Y Z变更集将是一个非常危险的游戏! – paulm 2013-03-06 16:32:00

+0

请参阅[Visual Studio团队基础服务器分支和合并指南](http://vsarbranchingguide.codeplex.com/) – 2013-10-17 23:29:45

回答

0

我可能是错的,但我不知道有一种方法可以告诉构建,以避免基于附加工作项的状态发生某些变更集。

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

我们经营了类似的东西多年,它对我们很好。许多人会告诉你,这是不好的做法,可能是,但这是由你来决定的。

至于自动化这个建设,我不认为这将是一个微不足道的工作。最难的部分将是合并。你可能会认为不存在冲突,因为它是单向合并,但已经这么做了好几年,我可以告诉你冲突确实会出现。

一步一步的解释

  1. 创建关闭trunk称为release
  2. 当你想要做一个部署一个分支,从trunk合并成release,但只樱桃采摘ReadyToDeploy的变更。这可能需要几次合并,因为变更集必须是连续的。
  3. 触发发布分支的构建/部署。
  4. 按照您的发布计划允许的步骤重复步骤2 - 3。
+0

所以这里是我所做的。 – PForsythe 2013-03-10 00:04:53

+0

所以这就是我所做的。 创建一个分支叫做分段 我有一个windows服务,我写了从我们的服务台(Zendesk)拉入票据,因此我添加了一些功能,以查询处于ReadyToDeploy状态的所有工作项。从该列表中,我获取所有关联的变更集并将其保存到列表中,然后按ID排序。接下来,我遍历我的变更集列表,并检查是否更改!= null并进行合并。我得到状态并检查冲突并尝试自动解决任何我可以解决的问题。如果更改集成功合并到我的分段分支中,我将它检入。 – PForsythe 2013-03-10 00:11:39

+0

仍然要做,启动构建并检查它是否完成,然后将这些更改复制到分段服务器。同时更新禅桌上的门票,让客户知道该项目正在升级 – PForsythe 2013-03-10 00:14:14

0

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

  1. 设置使用TFS的API在那个状态
  2. 使用API​​扫描项目的过程特拉弗斯项目获得检查插件连接
  3. 使用API​​来获取最新的源和目标分支
  4. 使用API​​通过更改集合(在#2中标识)(这不是小事,必须处理大量情况,但合并应该都是单向的,没有冲突,因此可行)
  5. 使用API​​检入
  6. 开始编译构建
  7. 如果编译生成成功开球发布构建
0

据我所知有使用这种方法的主要问题。假设您有两个变更集:#1和2.两个变更都包含相同文件的修改。现在更改集#2包含自己的更改以及#1中的更改​​。 如果您决定拉入变更集2并跳过#1,那么猜猜会发生什么。你会从#1中吸取变化。这显然是一个问题。