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

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

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

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

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

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

所以开发从“绿色”中拉出来,推向个人,TeamCity从个人构建,推向绿色。

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

在此处输入图像描述

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

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

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

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

在此处输入图像描述

决策基于以下流程:

Verigreen  - 基本流程

有关更多信息,请访问wiki或Verigreen.io网站

我想在2013年10月23日之后 ,答案可能是 – TeamCity中的自动合并 。

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

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

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

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

使用VS Team Services(fka Visual Studio Online)和TFS 2015或更新版本,您可以使用分支策略,要求将拉取请求传递构建作为Git的门控签入工作流程。