为基于C ++ / Qt的项目构建服务器/持续集成建议

时间:2011-11-29 15:39:47

标签: c++ qt continuous-integration build-automation

我正在寻找为基于Qt的C ++项目实现构建服务器。服务器需要从Subversion检出必要的代码/资产,构建可执行文件,组装安装项目的工件,以及构建安装媒体文件。目标平台和(粗略)工具链是:

  • Windows(32位和64位): qmake,nmake,msbuild,wix工具链。最终结果是安装程序EXE和DVD映像。
  • Mac OS X: qmake,make,自定义bash脚本来组装包。最终结果是磁盘映像和DVD映像中的应用程序包。
  • Ubuntu(32位和64位): qmake,make,debuild脚本。最终结果是DEB文件和DVD图像的集合。
  • Fedora(32位和64位): qmake,make,基于rpmbuild的脚本。最终结果是RPM文件和DVD映像的集合。

因此,至少有4个构建代理(如果32位和64位不能在同一个盒子上完成,可能更多)和7个配置。开源项目是首选,但这不是绝对的要求。

我看到的大多数工具似乎都适用于Java(Jenkins,CruiseControl等)或.Net(CruiseControl.net等)。这些工具可以与C ++工具链一起使用,还是我会经常使用打架系统?你过去使用过的任何东西都适用于Qt / C ++吗?

6 个答案:

答案 0 :(得分:13)

我使用Jenkins来构建和打包许多基于qmake,cmake和makefile的C ++项目。

cmake,qmake和msbuild有plugins,但也可以运行任何命令行脚本。

我使用Jenkins进行打包没有任何问题,因为它只是项目中的另一个命令行步骤。

有很好的插件可以监控编译器生成的warnings/errors的数量(我通常使用GCC)。

它还具有矩阵构建,允许您使用编译器标志,预处理器变量,平台等的不同组合多次构建项目。我设置的一个项目是在两个平台上具有5个布尔预处理器标志的矩阵构建,然后做2 ^ 6 = 64次构建。这些可能需要一些设置才能正确。

答案 1 :(得分:4)

您可以在这里阅读一个简单的例子:

Continuous Integration Server - Hudson

我认为Hudson,jenkins和builbot值得一试。浪费一两天评估并尝试快速示例将帮助您自信地选择。

答案 2 :(得分:3)

  

我看到的大多数工具似乎都适用于Java(Jenkins,CruiseControl等)或.Net(CruiseControl.net等)。这些工具可以与C ++工具链一起使用,还是我会经常使用打架系统?你过去使用过的任何东西都适用于Qt / C ++吗?

任何具有合理能力的CI系统都会有一个允许您执行构建命令所需程序的文件。

以下是我要考虑的内容:

  • CI系统是否在您选择的系统上运行
  • 是否允许您轻松查看日志
  • 是否与您的测试跑步者集成
  • 是否与您的代码覆盖率报告集成(例如BullseyeCoverage w / C ++& Qt)
  • 它是否会以合理的方式发布您的文件
  • 如有必要,将提供存档/存储文件(例如pdbs& lib * .so.debug)
  • 如果CI系统不支持功能X,您是否必须为每个支持的操作系统/系统编写
  • CI系统/用户界面是否易于使用。

我使用CruiseControl完成了上述操作,大多数事情都非常简单。我在make或qmake中编写了所有内容,并简单地调用了我需要执行的命令。对于单元测试和代码覆盖集成,我将内容输出到XML并将其转换为CruiseControl支持的内容。

我的建议,看看推荐的CI系统,并根据上述标准进行检查。

答案 3 :(得分:2)

我正在使用buildbot。我已经使用它4年了,我对它感到非常满意。

它是一个用python编写的应用程序,它运行在服务器上,可以管理各种操作系统上的多个客户端。我目前正在使用Windows XP,Windows 7,Debian,Ubuntu和CentOS构建奴隶。我的项目是C ++,其中一个(最终用户GUI)是用Python制作的。但是我们还集成了其他框架,用于GUI以外的其他功能。

buildbot的真正优点在于它可以通过在从属服务器上运行命令行来实现。有了这个,你可以做任何你想做的事。甚至在Windows系统上使用Visual Studio进行编译!通过这些命令行,您可以将所有输出集中在服务器上,并且可以访问。

您也可以在此site上找到引用其中许多内容的替代方案。 免责声明:3年前我看过它,我不知道它是否仍然准确。

答案 4 :(得分:1)

哈德森或詹金斯非常好。

答案 5 :(得分:1)

考虑到这个问题已经有7年的历史了,即使经过了这么多年,Jenkins确实确实很受欢迎,因为它开发了这样的定制服务。

Felgo还为Qt提供了持续集成和交付(CI / CD)服务。它支持桌面平台以及iOS,Android和嵌入式目标。完整的功能集在blog post中进行了描述。

免责声明:我是Felgo的软件开发人员