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

Dyl*_*tie 8 git teamcity feature-branch continuous-deployment branching-and-merging

我们的开发/发布周期如下:

  1. 开发人员创建功能分支,实现功能
  2. 开发人员指示功能已准备好进行验收测试(UAT)
  3. 测试人员部署功能分支并接受(或拒绝)功能

接受的功能然后由测试人员合并到主分支中,因此将在下一个发布周期中释放(我们每周部署主干/主代码).

我们对合并冲突感到沮丧,因为当测试人员使用UAT的功能并发现它不会干净地合并时,在其中工作的开发人员通常会转向别的东西.

我们正在考虑一个解决方案,TeamCity会针对当前主分支自动合并每个功能分支,导致合并冲突的任何构建都被视为失败的构建 - 这将使我们能够及早了解有问题的合并,以便我们可以修复他们早点.

TeamCity似乎没有对此工作流的内置支持(即,当推送分支X,结帐主,将分支X合并到其上,构建,单元测试,创建包时).有没有人使用TeamCity和Github创建类似的工作流程 - 可能使用自定义的msbuild目标?

编辑:我应该澄清我们正在使用Github,但我们目前没有使用拉取请求 - 听起来这是我应该调查的事情.:)

Dan*_*Lee 2

如果您使用 Github 和 Pull Requests,请查看 Hadi Hariri 的博客文章,了解如何在与 master 合并后获取 Pull Request:

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

Github 对每个拉取请求进行自动合并,并且生成的合并可用(尽管几乎没有记录):

git fetch origin +refs/pull/298/merge
Run Code Online (Sandbox Code Playgroud)

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

+refs/pull/*/merge
Run Code Online (Sandbox Code Playgroud)

编辑:你说你没有使用拉取请求,所以我想你可以用一些 git 命令来做到这一点。我自己还没有尝试过,所以这些只是帮助您入门的一些技巧。

  1. 使用Teamcity 中的分支规范功能来获取分支。设置结帐方式,在代理上结帐代码
  2. 在构建步骤中,将主分支合并到目标分支中。如果 master 在代理上不可用,您可能必须先获取它。如果出现任何错误,则构建失败。

要检查合并冲突,这些策略之一应该有效。