2011-04-13 51 views
70

詹金斯我目前使用詹金斯/哈德森。我们为主干和每个分支分别开发项目。此外,还有一些与Java代码相关的项目,但现在对于这些项目的设置相当基本(尽管我们可能会做更多的事情)。在C++项目执行以下操作:buildbot VS持续集成的大型大多是C++项目哈德森/ C++的持续集成

  • 构建与是否要重新配置,做一个干净的构建,或使用新的结账
  • 可选构建选项的一切,运行所有测试
  • 可选择使用运行所有测试Valgrind的的MEMCHECK
  • 奔跑cppcheck
  • 生成Doxygen文档
  • 时间表发布报告:单元测试,Valgrind的,cppcheck,编译器警告,SLOC,在打开的任务和代码覆盖(使用gcov的,GCO VR,和的Cobertura插件)
  • 部署代码夜间或按需到测试环境和一个包库

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

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

我看其他的解决方案和看起来像它可能是一个更换buildbot唯一的一个。这种情况会更好吗?自从我们已经使用Hudson以来,投资是否值得?为什么?

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

+4

我没有看过Buildbot,但我们几乎做了你提到的关于Hudson上的多个C++项目的所有事情。你从哈德森/詹金斯看到什么样的非理想事物? – 2011-04-13 18:21:09

+0

@Soo Wei Tan:看我的编辑。 – deuberger 2011-04-13 20:52:02

+0

迄今为止,Jenkins/Hudson一直很满意。我们还没有真正遇到任何我们认为不足或缺乏的情况。 – 2011-04-14 00:24:45

回答

41

两者都是开源项目,但你并不需要改变buildbot代码为“扩展”,它实际上是很容易导入自己的包在其配置中,你可以子类的大部分功能与你自己的补充。例如:你自己编译或测试代码,输出/错误的一些分析必须考虑到下一步,自己的警报电子邮件等格式化有很多的可能性。

一般来说,我会说,buildbot是最“通用”自动构建工具。然而Jenkins可能与运行测试最为相关,特别是以很好的方式解析和呈现结果(结果,细节,图表......一些点击消失),这些buildbot不会“开箱即用”。我实际上正在考虑使用两者来使性能更好的测试结果页.. :-)

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

希望它会有所帮助。

+0

感谢Christophe的输入和每个利弊的好概述。 – deuberger 2011-05-06 16:35:11

+3

“Buildbot(或Jenkins)应该只调用简单的命令” - 黄金字 – bobah 2015-07-31 08:20:24

5

'结果整合'也在jenkins/hudson中,您可以相对容易地捕获构建产品而无需'复制他处'。

对于我们的例子,java代码的覆盖率报告和单元测试指标以及javadoc都是集成的。对于我们的C++代码,插件有点缺乏,但您仍然可以获得大部分插件。

我们在0.7之前就运行了buildbot,现在运行了0.8,现在只能看到切换的真正原因,因为buildbot 0.8在很长一段时间内忘记了Windows从站,并且支持很差。

+8

所以,你建议Jenkins或buildbot用于大型C++项目吗? – deuberger 2011-07-21 14:36:58

6

还有许多其他的解决方案在那里,除了詹金斯/哈德森/ BuildBot:

  • 的TeamCity通过Jetbrains的
  • 由Atlassian的
  • 转到由ThoughtWorks的
  • 巡航控制
  • OpenMake梅斯特

有关细节事实上,只要您正在执行的代理(又名节点)支持这些任务,您所做的事情并不那么重要。

当构建更改为触发新构建(和测试),发布构件和发布测试结果时,CI服务器的美妙之处在于注意到这一点。当你比较我们提到的CI工具时,考虑诸如它的接口的可用性,分支有多容易(和自动合并可能提供的功能),通知(如XMPP/jabber)或基于信息的通知散热器(如连接显示器始终显示状态)。产品支持是另一个需要考虑的事情 - 詹金斯的支持只有在您有问题时谁回答社区问题。

我个人最喜欢的是Bamboo,但它收取了许可费。

+2

感谢您的建议。在我们的案例中,我们想要坚持使用FOSS解决方案,该解决方案可以消除除Cruise Control之外的所有选项。如果您可以提供一个原因,我可能想要切换到巡航控制,这可能会有所帮助。 – deuberger 2013-09-05 14:10:08

+2

追求它:Jenkins在自由/开放源码软件社区得到了比巡航控制更好的支持。全速前进,男人! – macetw 2013-09-05 17:04:21

+1

去实际上也成了最近的开源。 – timurb 2014-10-28 06:04:32