如何让TeamCity自动将Git功能分支与主分支合并,并在合并冲突时失败构建?

9
我们的开发/发布周期如下:
1. 开发人员创建一个功能分支,实现一个功能 2. 开发人员表示该功能已准备好进行验收测试(UAT) 3. 测试人员部署功能分支并接受(或拒绝)该功能
通过测试的功能将由测试人员合并到主分支中,并在下一个发布周期中发布(我们每周部署一次主干/主分支代码)。
我们在合并冲突方面遇到了困难,因为当测试人员进行 UAT 并发现它不能干净地合并时,通常情况下已经使用该功能的开发人员已经转向其他事物。
我们正在考虑一种解决方案,即每个功能分支都会自动由 TeamCity 合并到当前主分支上,任何导致合并冲突的构建都被视为失败的构建 - 这将使我们更早地发现问题合并,以便我们尽早修复它们。
TeamCity 似乎没有内置支持此工作流程(即当推送到分支 X 时,检出主分支,在其上合并分支 X,构建、单元测试、创建软件包)。是否有人使用 TeamCity 和 Github 创建了类似的工作流程 - 也许是使用自定义 msbuild 目标?
编辑:我应该澄清一下,我们正在使用 Github,但目前不使用 pull requests - 听起来这是我应该调查的事情。 :)

1
很好的问题Dylan,我也在寻找解决方案。当你在最后一句提到GitHub时,你是指Git吗?因为GitHub已经实现了这个功能。我已经在开源项目中利用了它。 - Pedro Pombeiro
1个回答

2
如果您正在使用Github和Pull Requests,则可以查看Hadi Hariri的博客文章,了解如何在合并为主干后获取拉取请求:

http://hadihariri.com/2013/02/06/automatically-building-pull-requests-from-github-with-teamcity/

Github会自动合并每个Pull Request,并且生成的并入结果是可用的(尽管几乎没有说明)。
git fetch origin +refs/pull/298/merge

其中拉取请求编号为298。因此,可以在Teamcity中使用通配符代替ID来获取所有已合并的拉取请求并自动构建。分支规范应如下所示:

+refs/pull/*/merge

编辑:你说你没有使用拉取请求,所以我猜你可以使用一些git命令来实现。我自己没有尝试过,这只是一些让你入门的技巧。

  1. 在 Teamcity 中使用 分支规范功能 获取分支。将 checkout 模式 设置为在代理上检出代码。
  2. 在构建步骤中将主分支合并到目标分支中。如果主分支不可用,则可能需要先获取它。如果遇到任何错误,则构建失败。

为了检查合并冲突,可以使用这些 策略 中的一种。


@Dylan-Beattie 你会在Github中使用Pull Requests,还是正在考虑在Teamcity中实现自己的流程? - Daniel Lee
Github的pull request功能几乎完全符合我们的要求 - 我们正在从Subversion迁移,并且还没有完全掌握所有Github的技巧 :) - Dylan Beattie
@DanielLee 我没有看到一个构建步骤选项,可以让你将主分支合并到指定的分支中。你怎么做呢? - Mark Evans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接