我可以想到使用它的充分理由;但是,它的缺点是什么?
(除了购买另一台服务器)
使用每日构建而不是它有什么好处?
答案 0 :(得分:23)
(值得注意的是,“持续集成”是指自动化与自动构建流程集成,自动运行测试和自动检测每件作品的失败。
值得注意的是,“持续集成”仅仅意味着中继或测试服务器。这并不意味着“推动所有变革”。
有很多方法可以进行持续集成。)
我想不出有任何理由不进行持续集成测试。我想我假设“持续集成”包括测试。仅仅因为它编译并不意味着它有效。
如果您的构建和/或测试需要很长时间,那么持续集成会变得昂贵。在这种情况下,在提交之前运行显然与您的更改相关的测试(覆盖率分析工具,如Devel::CoverX::Covered可以帮助发现哪些测试与哪些代码一起使用),在使用类似{{3}之类的提交后进行集成测试如果失败,请提醒开发人员。使用SVN::Notify之类的内容归档测试结果。这使得开发人员可以快速工作,而无需坐着观看测试套件运行,同时仍能及早发现错误。
也就是说,通过一些工作,您通常可以加快构建和测试过程。很多时候测试结果都很慢,因为每次测试都需要进行太多的设置和拆卸,指向一个太过耦合的系统,需要整个系统设置只是为了测试一小块。
解耦通常有助于将子系统分解为独立项目。较小的范围使得更容易理解和更快的构建和测试。每个提交都可以进行完整的构建和测试,而不会给程序员带来不便。然后可以将所有子项目收集在一起进行集成测试。
在每次提交时运行测试套件的一个主要优点,即使是在提交之后,你知道是什么打破了构建。而不是“我们昨天所做的事情打破了构建”,或者更糟糕的是“我们昨天做的四件事以不同的方式打破了构建,现在我们必须解开它”它是“修订版1234打破了构建”。您只需检查一个修订版即可找到问题。
每日构建的优势在于,至少您知道每天都会进行完整,干净的构建和测试运行。但无论如何你应该这样做。
答案 1 :(得分:12)
我认为它没有任何缺点。但是为了论证,这里是Eric Minick's article on UrbanCode (“这是关于测试而不是构建。”)他批评基于Martin Fowler's work的工具说他们不喜欢请留出足够的时间进行测试。
“为了在CI中取得真正的成功,Fowler声称构建应该是自我测试,并且这些测试包括单元和端到端测试。同时,构建应该非常快 - 理想情况下不到十分钟 - 因为它应该在每次提交时运行。如果有大量的端到端测试,在构建时执行它们同时保持整个过程不到十分钟是不现实的。登记/> 在每次提交时添加对构建的需求,并且需求开始变得不可能。选项可能是反馈较慢或删除了一些测试。“
答案 2 :(得分:9)
詹姆斯·肖尔(James Shore)有很多关于认为使用像CruiseControl这样的CI工具意味着你在进行持续集成的危险的博客文章:
设置CI服务器的一个危险是目标转移,认为重要的是“保持构建通过”而不是“确保我们拥有高质量的软件”。所以人们不再关心测试需要多长时间才能运行。然后他们花了太长时间才能在签入之前运行所有这些。然后构建不断破坏。然后构建总是被打破。所以人们注释掉测试以使构建通过。而且软件的质量下降了,但是嘿,构建正在过去......
答案 3 :(得分:4)
通常有两种情况我认为持续整合不是很有意义。请记住,我是CI的主要倡导者,并尽可能地使用它。
第一个是当roi没有意义的时候。我目前正在开发几个小型内部应用。这些应用程序通常非常简单,开发的整个生命周期大约需要一到两周。要正确设置CI的所有内容可能会加倍,我可能永远不会再看到这笔投资了。您可以争辩说我会将其恢复到维护状态,但这些应用程序在更新时可能会被丢弃。请记住,您的工作可能是发布软件,而不是达到100%的代码覆盖率。
我听到的另一个场景是,如果你不打算对结果做任何事情,CI就没有意义了。例如,如果您的软件必须发送到质量保证,并且质量保证人员每隔几天才能真正查看新版本,那么每隔几个小时就有一次构建是没有意义的。如果其他开发人员不打算查看代码指标并尝试改进它们,那么跟踪它们是没有意义的。当然,这并不是CI不是一项好技术的错,而是你的团队缺乏愿意接受CI。然而,在这种情况下实施CI系统是没有意义的。
答案 4 :(得分:0)
启动时,需要一段时间来设置所有内容。
如果添加测试,覆盖范围,静态代码检查,重复搜索,文档构建和部署,可能需要很长时间(数周)才能正确完成。在那之后,维护构建可能是一个问题。
例如,如果您向解决方案添加测试,您可以让构建根据某些条件自动检测它们,或者您必须手动更新构建设置。自动检测更难以正确。覆盖范围相同。与文档生成相同......
答案 5 :(得分:-4)
没有进行持续集成的唯一好理由是,当你的项目工作到你的集成测试没有在很长一段时间内发现任何缺陷并且他们花费太多时间来运行时你做一次构建的时间。换句话说:你已经做了足够的持续集成,你已经向自己证明了你不再需要它。