C++ Qt的连续构建系统

C++ Qt的连续构建系统,c++,qt,build,continuous-integration,C++,Qt,Build,Continuous Integration,我是一名Qt/C++开发人员。我想建立一个持续集成环境,在提交源代码后,它会触发一个构建过程,为我正在使用的3个平台构建代码: Linux OSX Win32 如果可能,如何设置这样的环境。欢迎提供任何提示或链接。 我已经读了很多关于詹金斯的书,但是我找不到任何好的教程。当然有可能。大多数版本控制系统都能够在服务器端执行自定义脚本。其中一些(例如git)有钩子在本地实现相同的功能。看一看 您所需要的只是创建一个脚本,该脚本将触发跨平台构建。大多数版本控制系统都允许使用提交后挂钩来启动构建之类

我是一名Qt/C++开发人员。我想建立一个持续集成环境,在提交源代码后,它会触发一个构建过程,为我正在使用的3个平台构建代码:

  • Linux
  • OSX
  • Win32
如果可能,如何设置这样的环境。欢迎提供任何提示或链接。
我已经读了很多关于詹金斯的书,但是我找不到任何好的教程。

当然有可能。大多数版本控制系统都能够在服务器端执行自定义脚本。其中一些(例如git)有钩子在本地实现相同的功能。看一看


您所需要的只是创建一个脚本,该脚本将触发跨平台构建。

大多数版本控制系统都允许使用提交后挂钩来启动构建之类的事件。或者,构建系统可以配置为定期轮询源代码管理存储库并管理自己的构建计划(这就是我们使用Jenkins的方式)

需要记住的是跨平台完成完整构建需要多长时间,以及在此期间的典型签入次数。如果您有一个相当规模的团队或有限的构建服务器资源,您可能会发现批处理签入是一种更好的持续集成构建方法。否则,您的构建系统可能很快就会试图迎头赶上


至于是否可以在所有目标平台上构建,这取决于您的工具链。

我想到了两个解决方案:

BuildBot

是一个用Python编写的高度可定制的持续集成系统。主组件提供了一个很好的基于web的GUI来监视和触发构建;从属组件放在目标机器上(通常是虚拟机,但它们可能是某个开发人员的Mac笔记本电脑)。文档足以构建一个基本的系统,定制可能有点棘手(至少对我来说是这样)。使用VC系统提供的提交/推送钩子,您可以轻松地跨从机激活主版本和触发器版本。它还支持增量构建(如果您的项目很大,这是必须的)

CDash


由CMake的作者开发,是一个web应用程序,收集来自整个网络的构建,不完全是您要求的,但我认为值得一试。如果你有一个开发团队,他们可以持续地将机器上的构建结果提交给服务器(如果你使用CMake,它几乎是透明的),那么它将非常强大。您不能像Buildbot那样从服务器触发构建,但您可以使用cron来设置一组VM,该cron检查更改,万一执行构建并将结果发送到CDash,Jenkins通过所有主要源代码管理系统的插件支持此功能。如果你认真考虑使用詹金斯(我强烈推荐它),考虑购买。

< P>我也建议詹金斯有以下几个原因:

  • 它将在您列出的所有平台上运行
  • 可以将其配置为在更新存储库时启动构建(提示:将作业配置为“轮询SCM”,这样您就不必使用SCM工具让它告诉Jenkins开始构建)
  • 它为单元测试提供了良好的支持(主要是通过插件)。[您的项目正在进行单元测试,对吗?]
  • 价格合适
一个更大的问题是,AFAIK,Qt不能很好地为其他平台进行交叉编译。使用Jenkins(和适当的插件),您应该能够解决这个问题


一种快速浮现在脑海中的方法是在每个平台上都有一个Jenkins实例。每个实例负责为自己的平台构建版本。在构建结束时,创建的工件都放在一个公共共享位置。

可能是您提交源代码的SVN系统,它有一个API,您可以用来捕获此类事件(如提交)?这不是编程问题。它可能属于你的意思是BuildBot?我必须在Unix和Mac上使用g++构建我的项目,但我认为我正在使用MSVC2008在Windows下编译它。BuildBot如何处理非unix系统?我已经为windows下的构建准备好了一个虚拟机,但是这种方法很容易出错,而且自动化程度不高……我使用MinGW工具链在windows下使用qmake进行构建,但我们计划迁移到能够处理VS项目的CMake。在这两种情况下,BuildBot从机都可以执行构建。我们使用BuildBot CI进行跨平台的Qt开发(Mac、Windows、Linux),它运行良好(SVN和git存储库)。不过,对构建不同git分支的支持可能会更好。>[每个平台上有一个Jenkins实例]-每个平台上的Jenkins slave会更好-这样您就有一个中央控制,不必更新每个实例,工件存储在master上,等等。