Git的门禁签到/预测试提交?

时间:2012-09-18 20:24:44

标签: c# git tfs jenkins teamcity

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

Atlassian Bamboo不支持门禁办理登机手续。 TeamCity确实支持它(使用他们的术语“延迟提交”),但不支持Git。使用Jenkins本身或Jenkins + Gerrit有很大的缺点,并且没有接近TFS中的门控签入功能。 (Jenkins的创作者在本视频中解释了缺点:http://www.youtube.com/watch?v=LvCVw5gnAo0

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

6 个答案:

答案 0 :(得分:16)

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

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

所以开发从'绿色'开始,推向个人,TeamCity从个人建立,推向绿色。

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

enter image description here

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

答案 1 :(得分:9)

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

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

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

enter image description here

根据以下流程做出决定:

Verigreen - Basic Flow

有关详细信息,请参阅wikiVerigreen.io网站

答案 2 :(得分:4)

我认为在October 23, 2013后答案可以是 - Automatic Merge in TeamCity

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

有时候拥有两全其美的好事......

答案 5 :(得分:0)

使用VS Team Services(fka Visual Studio Online)和TFS 2015或更新版本,您可以使用branch policies requiring a passing build作为Git的门禁签入工作流程的拉取请求。