我有这个问题来验证我对持续集成的了解。由于我的理解:持续集成将帮助我们检查构建是否尽可能快地存在任何错误或错误[红灯]。
我假设我们所有的开发人员都知道TDD,他们会在将某些内容推送到服务器之前一直进行测试。它意味着推送的代码必须在推送之前传递,因此我们需要ci服务器,因为我们总是有绿灯。
所以我的问题是,如果我们有一个总是遵循开发中TDD规则的优秀团队,我们是否需要ci服务器?
答案 0 :(得分:4)
这取决于您的CI服务器正在做什么。在提交到中央源代码存储库之前,您可以让每个开发人员在本地运行所有单元测试,但是开发人员如何知道要运行哪些单元测试?他们必须运行所有这些,以及所有集成测试,UI测试等。这可能需要很长时间才能进行大量测试。
通常,CI服务器将配置为在一夜之间运行更长的集成测试,以查看是否已引入任何重大更改。
此外,您忽略的CI服务器的另一个重要功能是实际构建源代码。当您提交对源代码存储库的更改时引入构建错误是很常见的,因为您忘记提交新文件,或者假设您的源代码正在构建它所构建的开发环境。
例如,您可能正在引用已安装到程序文件目录中的第三方库。这在每台开发人员计算机上构建都很好,因为他们安装了第三方库,但是在构建服务器上,您会检测到错误的引用,因为构建会失败。
此外,让CI服务器在提交时运行构建和测试不仅会更快地突出集成问题,而且还可以在提交后立即通知团队内的所有开发人员,因此问题的根源立即显现。
答案 1 :(得分:4)
所有团队都应该进行持续集成,但这并不意味着您需要拥有CI服务。詹姆斯肖尔有一个经典的帖子:
Continuous Integration is an Attitude, Not a Tool
所以如果你有这种态度,即使没有服务器,你也可以获得CI的巨大好处。也就是说,CI服务器可以提供多种帮助:
总结:您不需要服务器来获得CI的主要优势。但是,您可以从正确的服务器软件中获得许多相关的好处。
答案 2 :(得分:1)
首先,我怀疑所有项目都能负担得起TDD,因为它很昂贵且经常开发人员更喜欢直接编写功能并忘记测试,即使对于更简单的单元测试也是如此。 当真正应用时,TDD将检测特征上的问题,但不一定是包含许多不同组件集成在一起的大型项目的全尺寸。一个简单的例子是将每个部分组合在一起工作,但是没有使用与相同的api对齐的部分(oups我使用了错误的库版本......)。 完整的产品构建有助于发现与集成相关的问题。以连续的方式使用它有助于在引入问题时找到问题,单元测试可能无法检测到这些问题,因为单元测试分别关注每个特征或子特征。