我们所有的自动化构建都是使用 Team City 完成的。
我们使用的最自动化的项目实际上是一个编译器。我们的测试套件包含大约 20000 个已编译和运行的测试查询,这些查询在每次签入时运行。这通常需要一个小时的时间,但是将完整的测试套件保存在构建机器上的 RAM 驱动器中(而不是每次都检查出来)将其减少到几分钟。
每天晚上触发第二次构建,运行这些相同的测试,但在 4 个不同的配置文件下,同时在 NCover 下运行,生成代码覆盖率报告。这个场景需要几个小时,这就是为什么它是作为夜间构建完成的。同时生成其他内部报告,以确保一切正常。
对测试套件本身的更新是单独触发的,并检出到 RAM 驱动器,为下一次运行做好准备。否则,检查测试会占用大部分构建时间。部分测试套件来自我们无法控制的远程 CVS 存储库,甚至在构建时间中查询更新会增加几分钟,因此这也在“更新测试”构建中完成。这种松散的耦合意味着我们不得不将这个项目的构建限制在一台机器上,但由于反馈如此之快,这不是一个大问题。
事实证明,在保持代码库的高覆盖率的同时尽可能快地保持“常规”测试构建非常有帮助。任何缓慢的测试(超过一秒左右)都已通过夜间构建。在我们的案例中,将测试保存在 RAM 驱动器中确实很有帮助,尽管我们的场景相当专业。我想模拟你的数据库是最接近的等价物。我的建议是通过删除任何“笨拙”或缓慢的测试来保持一个构建“精简和平均”,让快速响应知道您可能没有破坏任何东西。其他构建可以在单独的机器上运行,也可以在晚上运行,以保持快速构建的快速响应。
从角度来看,我们(对于另一个项目)最长的自动化构建有时需要一天以上的时间,尽管幸运的是它不需要定期运行。