Continuous integration 为什么我的开发团队应该有一个构建服务器?

Continuous integration 为什么我的开发团队应该有一个构建服务器?,continuous-integration,build-automation,Continuous Integration,Build Automation,我们知道这很好,但我发现我自己向我的雇主证明了这一点。请说明为什么开发团队需要构建服务器。以避免“但它在我的盒子上工作”的问题 拥有一个一致的、已知的环境,在该环境中构建软件以避免依赖于本地开发人员 如果需要,您可以使用虚拟服务器来避免(大量)额外成本。尽快了解哪些单元测试正在工作,哪些没有工作;此外,您还将知道一次通过的单元测试是否开始失败。这应该可以总结为什么构建服务器至关重要: 这是一个连续的质量测试仪表板;它向您显示有关软件质量的统计数据,并立即向您显示这些数据。(朱尼特,科贝图拉) 它

我们知道这很好,但我发现我自己向我的雇主证明了这一点。请说明为什么开发团队需要构建服务器。

以避免“但它在我的盒子上工作”的问题

拥有一个一致的、已知的环境,在该环境中构建软件以避免依赖于本地开发人员


如果需要,您可以使用虚拟服务器来避免(大量)额外成本。

尽快了解哪些单元测试正在工作,哪些没有工作;此外,您还将知道一次通过的单元测试是否开始失败。

这应该可以总结为什么构建服务器至关重要:


这是一个连续的质量测试仪表板;它向您显示有关软件质量的统计数据,并立即向您显示这些数据。(朱尼特,科贝图拉)

它确保开发人员不会因为其他开发人员破坏构建而受到束缚,并鼓励开发人员编写更好的代码。(FindBugs,PMD)


通过第一次从开发人员那里获得更好的代码(减少测试和重新测试的费用)以及从同一个开发人员那里获得更多的代码(因为他们不太可能互相绊倒),全年都可以为您节省时间和金钱。

非技术人员可能涉及的两个主要原因:

  • 它提高了开发团队的工作效率,因为问题在早期就被发现了

  • 这使项目的状态非常明显。我已经向我的管理层展示了构建状态仪表板,现在他们一直在看它


还有一件事。像Hudson这样的东西设置起来非常简单——您可能只需要在角落里的某个地方运行一段时间,然后稍后再显示出来。

使用构建服务器有多种原因。没有什么特别的顺序,而且是在我的脑海里:

  • 您可以简化开发人员的工作流程,减少出错的机会。您的构建服务器可以处理多个步骤,例如签出最新代码、安装所需的软件等。开发人员的计算机上不可能存在会导致构建随机通过或失败的散乱DLL

    您的构建服务器可以复制您的目标环境(操作系统等),这样就不太可能在开发人员的桌面上工作,也不太可能在生产中出现问题

  • 虽然对开发人员来说,测试他们签入的所有内容是一个很好的实践,但有时他们就是不这样做。然后,最好让构建服务器在那里捕获测试错误,并让团队知道产品已损坏

  • 集中构建提供了对代码度量的轻松访问——哪些测试通过了,哪些测试失败了,测试的频率,代码覆盖情况如何等等。通过提供及时的反馈,快速、轻松地修复错误,对代码库的质量状态有一个坚实的了解,可以降低维护和测试成本

  • 产品部署简化了——开发人员或QA不必记住多个手动步骤。它可以很容易地自动化

  • 开发人员和QA之间的联系被简化。QA人员可以到已知的位置获取最新的、经过属性版本控制的版本

  • 为发布分支建立构建很容易,为处于发布阶段的产品提供了一个额外的安全网,在进行代码更改时必须格外小心


  • 这是我的主要论点:

    • 所有官方发行版必须在受控环境中生成。也不例外
    因为你永远不知道开发人员是如何创建他们的个人版本的

    您也不需要像在“刀片服务器成本高昂”中那样谈论构建服务器。我设置的第一个构建服务器是一台桌面机器,它被插在角落里。三年多以来,它一直为我们服务得很好

    一旦你有了构建机器,你就可以开始添加一些特性(Hudson很棒),并实现其他海报提到的一切


    一旦您的构建机器对您的组织不可或缺(并且每个人都看到了它的好处),如果你愿意,你可以要求一个闪亮的新刀片:-)

    要说服你的雇主拥有一个构建服务器,最简单的办法就是告诉他们,他们将能够发布得更快,质量更好

    更快的发布版本来自对构建质量的即时反馈。如果有人破坏了构建,他或她可以立即修复破坏的构建,从而避免构建和发布计划的延迟。如果没有构建服务器,团队将不得不花时间试图找到发生了什么、什么时候发生了什么以及如何修复它

    每次有人检查版本控制系统的更改时,构建服务器都会自动运行错误检测工具,从而实现更好的质量。您没有提到组织中的主要开发语言是什么,但是这些工具,先进但商业化,简单但免费,实际上适用于所有语言。想到Lint、FxCop、FindBugs和PMD


    您也可以查看此内容以进行更广泛的讨论。

    感谢各位的精彩回答,这里是对原始问题的一个扭曲。我的雇主同意让机器执行CI任务。我现在的挑战是证明为什么这台机器应该是独立的。我一直在使用整个公司用于测试的服务器,这意味着每个人都在搞乱它。我的论点是,我们需要一个受控的环境(正如弗拉基米尔指出的那样)。你的想法是什么?你更喜欢虚拟机还是专用机器?@H.亚伯拉罕·查韦斯:这是另一个问题。你应该把它当作一个新问题来问,而不是在这里的评论中。