【问题标题】:Build server / continuous integration recommendation for C++ / Qt-based projects为基于 C++/Qt 的项目构建服务器/持续集成推荐
【发布时间】:2011-11-29 15:39:46
【问题描述】:

我希望为基于 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++ 配合使用?

【问题讨论】:

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


【解决方案1】:

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

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

我已经使用 Jenkins 完成了打包,没有任何问题,因为这只是项目中的另一个命令行步骤。

有很好的插件可以监控编译器产生的warnings/errors的数量(我一般用GCC)。

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

【讨论】:

    【解决方案2】:

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

    Continuous Integration Server - Hudson

    我认为 Hudson、jenkins 和 builbot 值得一试。浪费一两天时间评估和尝试一个简单的例子将帮助您自信地选择。

    【讨论】:

    • 嘿,链接好像坏了,你能找到一个有效的吗,@kikeenrique?
    【解决方案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 系统,并根据上述标准对其进行检查。

    【讨论】:

      【解决方案4】:

      我为此使用buildbot。我已经用了 4 年了,感觉很满意。

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

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

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

      【讨论】:

        【解决方案5】:

        Hudson 或 Jenkins 都不错。

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2011-02-12
            • 2012-08-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-22
            • 1970-01-01
            • 2010-09-15
            • 2011-07-13
            相关资源
            最近更新 更多