【问题标题】:How do I get TeamCity to automatically merge a Git feature branch with master and fail the build in case of merge conflicts?如何让 TeamCity 自动将 Git 功能分支与 master 合并,并在合并冲突的情况下使构建失败?
【发布时间】:2013-06-12 13:43:05
【问题描述】:

我们的开发/发布周期是这样的:

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

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

我们对合并冲突感到沮丧,因为当测试人员对功能进行 UAT 并发现它不会干净地合并时,从事该功能的开发人员通常会转向其他事情。

我们正在考虑一种解决方案,通过 TeamCity 自动将每个功能分支与当前主分支合并,并且任何导致合并冲突的构建都被视为失败构建 - 这将使我们能够及早了解有问题的合并,因此我们可以尽快修复它们。

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

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

【问题讨论】:

  • 很好的问题 Dylan,我希望自己解决同样的问题。当您在最后一句中提到 GitHub 时,您是指 Git 吗?因为 GitHub 已经实现了这个功能。我已经在开源项目中利用了它。

标签: git teamcity branching-and-merging continuous-deployment feature-branch


【解决方案1】:

如果您使用 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

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

+refs/pull/*/merge

编辑:您说您没有使用拉取请求,所以我想您可以使用一些 git 命令来执行此操作。我自己还没有尝试过,所以这些只是一些帮助您入门的提示。

  1. 在 Teamcity 中使用 branch specification feature 获取分支。设置checkout mode查看代理上的代码
  2. 在构建步骤中将主分支合并到目标分支。如果 master 在代理上不可用,您可能必须先获取它。如果出现任何错误,则构建失败。

要检查合并冲突,strategies 之一应该可以工作。

【讨论】:

  • @Dylan-Beattie 你打算在 Github 中使用 Pull Requests 还是考虑在 Teamcity 中实现自己的流程?
  • Github 拉取请求功能几乎正是我们想要的——我们正在从 Subversion 迁移,还没有完全跟上所有 Github 的花里胡哨 :)跨度>
  • @DanielLee 我没有看到可让您将 master 合并到给定分支的构建步骤选项。你是怎么做到的?
猜你喜欢
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
相关资源
最近更新 更多