TFS门禁办理登机手续的缺点

Dan*_*ska 26 tfs continuous-integration checkin

我一直在使用TFS中的持续集成(CI)构建.但是,在我上一个项目中,我们开始使用门控签入触发器.

使用门禁办理登机手续有什么不利之处吗?因为如果它阻止团队检查损坏的代码,那么CI触发器的目的是什么?

Dan*_*ann 40

门控签入是一种持续集成构建的形式.在TFS中,它创建一个包含正在验证的代码的shelveset,然后运行该代码的构建.只有当代码成功构建并且所有已配置的单元测试都通过时,代码才会实际提​​交.

持续集成是不同的 - 在CI中,无论构建的结果如何,都会提交代码.如果由于提交了错误的代码而导致CI构建失败,则代码仍然存在于源代码管理中,可供所有人使用.

现在对于基于意见的部分:如果你有大量具有不同技能/经验水平的开发人员,那么门控签入很棒,因为它可以防止破解代码进入源代码控制.缺点是它增加了代码被提交和代码可供其他人使用之间的时间,因此可能导致人们坐在他们的拇指周围等待构建成功完成的情况.

我建议使用门控办理登机手续作为权宜之计.如果您有大量的封闭式签入构建失败,那么它正在完成其工作并防止错误的代码被提交.如果随着时间的推移,团队成熟并且门禁签到版本很少失败,那么它的用途就会减少,并且应该切换到持续集成并纠正失败的版本,而不是延迟每次提交的机会,而是出现问题.

  • 如果您使用的是Git,您可以使用构建策略来实现类似的门禁签入工作流程:https://msdn.microsoft.com/Library/vs/alm/Code/git/branch-policies#Requirethepullrequesttobuild (2认同)
  • 澄清一下,人们不必等待 GC 完成(“摆弄他们的拇指等待”)。他们可以选择不在本地保存更改并继续执行下一个任务。当然,如果他们依赖于该部分,他们可以保留本地更改并继续,并且在 GC 完成后,他们可以获取最新信息并协调他们的服务器/本地更改。我们这样做可以让人们免于等待,并让 GC 成为所示的权宜之计。 (2认同)
  • @SnapJag虽然确实如此,但我发现*在实践中*搁置/取消搁置工作流程非常繁琐,足以导致拇指转动。如果构建要运行 5 分钟并且有被拒绝的风险,我将不愿意切换上下文并开始处理其他事情。 (2认同)

tkr*_*use 6

门控签入从根本上是有缺陷的,因为它们验证脏的本地状态,而不是版本化状态,因此它们不能替换基于干净的板岩(例如在 CI 管道中)的独立检查。同样,QA 通常需要使用环境矩阵(不同的编译器版本、不同的浏览器、不同的操作系统等)来完成,设置成本最好投资于中央 CI。

门控签入也使提交变得更加困难和缓慢。这通常是一件坏事,因为:

  • 在 TDD 中,成员应该能够在测试失败时推送提交
  • 将错误报告为失败的测试非常有用
  • 在 WIP(进行中)分支上进行合作时,成员应该能够推送脏的更改以使其快速提供给其他人
  • 在进行重大更改时,让其他成员在花时间完成之前先查看未完成的工作会很有用
  • 许多人喜欢定期提交不完整的工作作为快照/备份的形式
  • 在分支之间频繁切换时提交未完成的工作是很好的(仅存储有限的帮助,特别是对于新文件)
  • QA 不能有时间限制,但提交时间不应太长

因此,门控检查的场景可以作为解决方法或快速和肮脏的缓解:

  • 您的 VCS 使分支变得困难,或者您的公司不允许分支
  • 项目很小
  • 只有一位开发者
  • 不存在 CI
  • 只有特定的长期分支受到门的保护(但这不是 CI 的替代品)

  • 随意添加一个答案,解释具有这种区别的有用分支策略 (2认同)
  • 只需考虑一点:永远不要低估新开发人员搞乱你的存储库的力量。无论构建等待时间如何,门控检查对于大规模开发来说都是无价的。 (2认同)