31

我正在考虑从 TFS(Team Foundation Server)迁移到 Git,但找不到与 TFS 对门控签入(也称为预测试或延迟提交)的支持相匹配的任何内容。

Atlassian Bamboo 不支持门控签到。TeamCity 确实支持它(使用他们的术语“延迟提交”),但不支持 Git。单独使用 Jenkins 或 Jenkins+Gerrit 有很大的缺点,并且不接近 TFS 中的门控签入功能。(詹金斯的创造者在这个视频中解释了自己的缺点:http ://www.youtube.com/watch?v=LvCVw5gnAo0 )

Git 非常流行(有充分的理由),那么人们是如何解决这个问题的呢?目前最好的解决方案是什么?

4

6 回答 6

16

我们刚刚开始使用 git 并使用工作流实现了预测试提交(我今天刚刚完成了测试)。

基本上每个开发人员都有一个个人存储库,他们具有读/写访问权限。在我们的例子中,构建服务器 TeamCity 使用这些个人存储库进行构建,然后如果成功将更改推送到“绿色”存储库。开发人员对“绿色”没有写入权限,只有 TeamCity 构建代理可以写入,但开发人员从“绿色”中提取通用更新。

因此,开发者从“绿色”拉动到个人,TeamCity 从个人构建,推动到绿色。

这篇博文展示了我们正在使用的基本模型,个人存储库使用 GitHub 分叉(使用分叉意味着存储库的数量不会失控并最终花费更多,这意味着开发人员可以管理个人构建,因为他们可以分叉然后创建团队城市构建工作以将他们的代码推送到“绿色”):

在此处输入图像描述

这是在 TeamCity 中设置的更多工作,因为每个开发人员都必须有自己的构建配置。这实际上必须是 2 个配置,因为 TeamCity 似乎执行所有构建步骤(包括最后的“推动绿色”步骤),即使之前的构建步骤失败(如测试:)),这意味着我们必须有一个个人为开发人员构建,然后是另一个依赖于它的构建配置,假设构建有效,它只会进行推送。

于 2012-09-18T20:35:59.837 回答
9

查看Verigreen - 一个轻量级的服务器端门控签到系统。它在进入系统保护的分支之前验证每个提交。Verigreen 不允许任何失败的 CI 提交破坏集成、发布或任何需要保护的分支。此外——它是一个免费的开源项目。

工作原理: Verigreen 拦截签入并在临时分支中运行验证 - 这样在提交失败的情况下,只有相关开发人员会受到影响。

  • 预接收挂钩拦截并创建代码的临时分支。
  • 验证通过 Jenkins 作业运行。验证作业内容是完全可配置的。
  • 经过验证的代码被合并回受保护的分支,而失败的提交被阻止并发送给开发人员的通知。

在此处输入图像描述

根据以下流程做出决定:

Verigreen - 基本流程

有关更多信息,请参阅wikiVerigreen.io站点

于 2015-10-08T06:47:37.373 回答
4

我认为在2013 年 10 月 23 日之后,答案可以是 -在 TeamCity 中自动合并

于 2014-09-17T16:22:01.267 回答
0

git 有不同的理念——提交很容易,随心所欲地提交。如果有问题,您可以稍后更改。合并很容易。因此,您可以组织适当的工作流程,例如开发人员可以在单独的分支中提交。当一个分支被测试时,它可以被合并到一个主分支中。

于 2012-09-18T20:37:45.220 回答
0

为什么不使用 TFS 作为中央存储库并使用 GIT 作为本地 DVCS 解决方案?

这将允许您在本地构建和提交,然后将您想要的内容推送到 TFS 服务器并进行封闭式构建。

有时,两全其美是件好事……

于 2012-09-22T21:44:44.543 回答
0

使用 VS Team Services (fka Visual Studio Online) 和 TFS 2015 或更高版本,您可以使用需要通过构建的分支策略来作为 Git 的门控签入工作流。

于 2016-03-21T13:25:42.890 回答