我目前使用 Jenkins/Hudson 来进行一个大型的 C++ 项目的持续集成。我们为主干和每个分支都有单独的项目。另外,还有一些与 Java 代码相关的项目,但是目前那些项目的设置相当基本(尽管我们以后可能会做更多的工作)。C++ 项目执行以下操作:
- 使用选项构建所有内容,包括重新配置、清理构建或使用新的检出
- 可选地构建并运行所有测试
- 可选地使用 Valgrind 的 memcheck 运行所有测试
- 运行 cppcheck
- 生成 doxygen 文档
- 发布报告:单元测试、valgrind、cppcheck、编译器警告、SLOC、开放任务和代码覆盖率(使用 gcov、gcovr 和 cobertura 插件)
- 每晚或按需部署代码到测试环境和软件包仓库
所有内容都可配置为自动构建,并且按需构建时是可选的。底层实现使用控制大部分功能的 bash 脚本,该脚本进一步依赖于我们的构建系统,该系统使用 automake 和 autoconf 以及自定义的 bash 脚本。
最初我们开始使用 Hudson(此时),因为 Java 团队正在使用它,而我们只是想要每晚的构建。从那时起,我们添加了很多功能,并继续添加更多。在某些方面上,Hudson 很好,但肯定不是理想的。
我看过其他解决方案,唯一看起来可以替代的是 Buildbot。对于这种情况,使用 Buildbot 是否更好?既然我们已经在使用 Hudson,那么投资是否值得呢?为什么?
编辑:有人问我为什么不认为 Hudson/Jenkins 是理想的。简短的回答是一切都可以改进。我只是想知道 Jenkins 是否是当前最佳解决方案,还是是否有更好的东西(例如 Buildbot?)可在新要求出现时更容易维护。