buildbot vs hudson / jenkins for C ++持续集成

我目前正在使用jenkins / hudson进行持续集成,主要是C ++项目。 我们有单独的项目为主干和每个分支。 另外,Java代码还有一些相关的项目,但是现在对于这些项目的设置是相当基本的(尽pipe我们可能会做更多的工作)。 C ++项目执行以下操作:

  • build立一切与select是否重新configuration,做一个干净的build设,或使用一个新的结帐
  • 有select地构build并运行所有testing
  • 可以使用Valgrind的memcheck运行所有testing
  • 运行cppcheck
  • 生成doxygen文档
  • 发布报告:unit testing,valgrind,cppcheck,编译器警告,SLOC,开放任务和代码覆盖(使用gcov,gcovr和cobertura插件)
  • 每晚或按需部署代码到testing环境和软件包存储库

一切都可以configuration为自动构build和可选的按需构build。 在下面,有一个bash脚本来控制这个,这更多的取决于我们的构build系统,它使用automake和autoconf以及自定义的bash脚本。

我们开始使用Hudson(当时),因为这是Java人使用的,我们只是想每晚构build。 从那以后,我们增加了更多,并继续增加更多。 在某些方面哈德森是伟大的,但肯定是不理想的。

我已经看过其他的解决scheme,唯一看起来可以替代的是buildbot。 在这种情况下可以改善吗? 自从我们已经使用Hudson以来,投资是否值得? 为什么?

编辑 :有人问为什么我没有find哈德森/jenkins是理想的。 简而言之,一切都可以改善。 我只是想知道,如果jenkins是我用例的最佳解决scheme,或者是否有更好的东西(buildbot?),那么从长远来看,即使有新的需求出现,也会更容易维护。

两者都是开源项目,但是您不需要更改buildbot代码来“扩展”它,实际上很容易将自己的软件包导入到其configuration中,在这种configuration中,您可以使用自己的附加function对大部分function进行分类。 例如:你自己的编译或者testing代码,一些输出/错误的parsing,以及你自己格式化的警报邮件等,这里有很多的可能性。

一般来说,我认为buildbot是最“通用”的自动构build工具。 然而jenkins可能是与运行testing最好的相关,特别是以很好的方式parsing和呈现结果(结果,细节,图表,一些点击),buildbot不会“开箱即用”。 我实际上正在考虑使用这两个有更性感的testing结果页.. 🙂

另外,作为一个经验法则,创build一个新工具的configuration应该不难:如果指定要做什么(configuration,构build,testing)太难以从一个工具切换到另一个工具,则是(坏的)标志没有足够的configuration脚本被移动到源。 Buildbot(或Jenkins)只应该调用简单的命令。 如果运行testing很简单,那么开发人员也会这样做,这会提高成功率,而如果只有持续集成系统运行testing,那么您将在运行之后运行它来修复新的代码故障,并且会松动它的非回归值,只是我的0.02€:-)

希望它会有所帮助。

除了Jenkins / Hudson / BuildBot之外,还有很多其他解决scheme:

  • TeamCity by Jetbrains
  • 由Atlassian竹
  • 去Thoughttworks
  • 巡航控制
  • OpenMake Meister

事实上,你所做的事情并不那么重要,只要你正在做的代理(aka节点)支持这些任务。

CI服务器的美妙之处在于当构build更改以触发新构build(和testing),发布构件以及发布testing结果时,会注意到这一点。

当您比较我们提到的CI工具时,请考虑诸如界面的可用性,分支有多容易(以及它可能提供的自动合并function),通知(如XMPP / jabber)或信息散热器(如挂钩使显示器始终显示状态)。 产品支持是另一个需要考虑的问题 – jenkins的支持只有当你有问题时谁回答社区问题。

我个人最喜欢的是竹子,但它带有许可费。

“结果整合”也在jenkins / hudson中,您可以相对容易地捕捉构build产品,而无需“复制到别处”。

对于我们的实例,覆盖报告和unit testing指标以及Java代码的javadoc都是集成的。 对于我们的C ++代码来说,插件是有点缺乏的,但是你仍然可以获得大部分的插件。

我们从0.7开始就运行buildbot,现在运行了0.8,现在只是看到了切换的真正原因,buildbot 0.8在很长的一段时间内忘记了窗口的奴隶,而且支持很差。