Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Continuous integration 持续集成-是否需要?_Continuous Integration - Fatal编程技术网

Continuous integration 持续集成-是否需要?

Continuous integration 持续集成-是否需要?,continuous-integration,Continuous Integration,我有这个问题来验证我关于持续集成的知识。据我所知:持续集成将帮助我们尽快检查构建是否有任何bug或错误[红灯] 我假设我们所有的开发人员都知道TDD,他们会在将某些东西推送到服务器之前一直进行测试。这意味着推送代码必须在推送之前传递,因此我们不再需要ci服务器,因为我们总是有绿灯 所以我的问题是,如果我们有一个在开发中始终遵循TDD规则的好团队,我们需要ci服务器吗 首先,我怀疑所有的项目都能负担得起TDD,因为它很昂贵,而且开发人员通常更喜欢直接编写特性代码,而忽略测试,即使是简单的单元测试。

我有这个问题来验证我关于持续集成的知识。据我所知:持续集成将帮助我们尽快检查构建是否有任何bug或错误[红灯]

我假设我们所有的开发人员都知道TDD,他们会在将某些东西推送到服务器之前一直进行测试。这意味着推送代码必须在推送之前传递,因此我们不再需要ci服务器,因为我们总是有绿灯


所以我的问题是,如果我们有一个在开发中始终遵循TDD规则的好团队,我们需要ci服务器吗

首先,我怀疑所有的项目都能负担得起TDD,因为它很昂贵,而且开发人员通常更喜欢直接编写特性代码,而忽略测试,即使是简单的单元测试。 当真正应用时,TDD将检测功能上的问题,但不一定是包含集成在一起的许多不同组件的大型项目的全面问题。一个简单的例子是将多个片段组合在一起,每个片段都可以工作,但未能使用与相同api对齐的片段(我使用了错误版本的库……)。
拥有完整的产品构建有助于发现与集成相关的问题。以连续的方式进行测试有助于在引入问题时发现问题,这些问题可能无法通过单元测试检测到,因为单元测试分别关注每个功能或子功能。

这取决于CI服务器正在执行的操作。您可以让每个开发人员在提交到中央源代码存储库之前在本地运行所有单元测试,但是开发人员如何知道要运行哪些单元测试呢?他们必须运行所有这些测试,以及所有集成测试、UI测试等。这可能需要很长时间进行大量测试

通常,CI服务器将被配置为在一夜之间运行较长的集成测试,以查看是否引入了任何破坏性的更改

另外,您忽略了CI服务器的另一个重要特性是源代码的实际构建。在将更改提交到源代码存储库时,很常见会引入构建错误,因为您可能忘记提交新文件,或者您的源代码对其构建的开发环境做出了一些假设

例如,您可以引用已安装到程序文件目录的第三方库。这在每台开发人员机器上都能很好地构建,因为他们安装了第三方库,但是在构建服务器上,您会检测到错误的引用,因为构建会失败


此外,让CI服务器在提交时运行构建和测试不仅可以更快地突出显示集成问题,而且还可以在提交后不久通知团队中的所有开发人员,以便立即发现问题的根源。

所有团队都应该进行持续集成,但这并不意味着您需要CI服务。詹姆斯·肖尔(James Shore)在这方面发表了一篇经典文章:

因此,如果你有这种态度,即使没有服务器,你也能从CI中获得巨大的好处。也就是说,CI服务器可以提供帮助的原因有很多:

  • 人类是容易犯错的,即使是出于好意,他们也不总是把事情做好。服务器是自动化和可预测的
  • 服务器在比典型的开发人员工作站更干净的环境中运行构建。这可能会突出显示在部署/发布之前未被注意到的问题
  • 如果您支持多个平台,那么一个好的CI服务器可以轻松地为您在所有平台上进行测试
  • 如果您有很多集成测试,这可能比单元测试慢,那么要求所有开发人员都预先签入它们可能会很麻烦。相反,他们可以运行快速的单元+冒烟测试来捕获99%的问题,并让CI服务器运行整个套件
  • 服务器可以维护构建历史记录,显示随时间变化的趋势。例如,这非常适合于漂移分析(检查性能趋势)
  • CI服务器提供了许多您可能感兴趣的附加功能,这些功能因服务器而异(例如,支持发布版本、灵活的计划、通知、并行版本)

  • 总之:您不需要服务器就可以获得CI的关键好处。但是,您可以从正确的服务器软件中获得许多相关的好处。

    感谢您提供了非常详细的答案。我非常喜欢第一点:)