Continuous integration 清洗还是不清洗

Continuous integration 清洗还是不清洗,continuous-integration,build-process,Continuous Integration,Build Process,我在一个中型项目上工作,该项目使用持续集成来执行常规构建。我们的项目目前有相当长的构建时间(45-55分钟),我们一直在研究可以进行哪些优化来减少这一时间 建议的优化之一是取消每次构建开始时的清理步骤,即删除整个构建目录,并从源代码管理中获取所有源文件。相反,只需检索已更改的文件并启动新的构建。粗略估计,每次构建可以为我们节省10-20分钟,但这个建议让我有点不舒服 所以我转向Stack Overflow社区,看看最佳实践是什么。。。您的持续集成是否总是进行干净的构建?是否有特别的理由支持和/或

我在一个中型项目上工作,该项目使用持续集成来执行常规构建。我们的项目目前有相当长的构建时间(45-55分钟),我们一直在研究可以进行哪些优化来减少这一时间

建议的优化之一是取消每次构建开始时的清理步骤,即删除整个构建目录,并从源代码管理中获取所有源文件。相反,只需检索已更改的文件并启动新的构建。粗略估计,每次构建可以为我们节省10-20分钟,但这个建议让我有点不舒服

所以我转向Stack Overflow社区,看看最佳实践是什么。。。您的持续集成是否总是进行干净的构建?是否有特别的理由支持和/或反对这一点


我将在下面发表我的想法,试图不偏袒任何人,但我真的很想听听其他的观点。

持续集成就是关于可重复性的。如果你每次都能产生一个可靠的构建而不需要清洗,那么就去做吧。不删除生成目录的问题是,从SCM中删除的文件可能不会从生成目录中删除,因此可能会扰乱部署和测试

我个人建议清理构建目录,但不要删除源代码。这假定SCM可以正确同步源



清洁大约需要15分钟?这是一段相当长的时间,我很想知道是什么花费了这么长的时间。

对于持续集成,快速转变非常重要。我以前做过这样的权衡,我认为这是值得的。偶尔,它会让事情顺利进行,但更快地获得反馈的好处是值得的


除了执行频繁的增量构建外,还可以执行不太频繁的干净构建。这为您提供了这两种方法的大部分好处。

持续集成的原因是要尽早识别所有问题,而不是快速识别一些问题,以及其他问题——好的,如果有的话

不清洁会使问题在相当长的一段时间内未被发现。大多数部分构建系统仍然依赖于文件时间戳来保证完整性,我还需要说更多

清洁通常是确保构建良好的唯一方法。另一种方法可能是定期(比如每晚)清洁,因此最糟糕的情况是在检测到问题前一天(是否足够早?)

您对改进构建服务器的预算是多少。你们能让你们的构建速度更快吗?优化、更多/更快的硬件、并行构建步骤、更快的编译器等等。你们能使用更快的构建工具,比如SCON或类似的工具,它将利用构建服务器中的所有8个CPU(特别是若你们使用make的话)


我会打扫的

我认为我们现在有超过10000个文件(其中很大一部分是可重用组件或现成软件的源文件)。删除并同步所有这些文件是一件痛苦的事情,如果您只删除构建目录,而不删除源文件,您可以节省多少时间?+1同意您的观点。我们也在研究硬件,肯定还有改进的余地