Python代码库的持续集成系统

我开始使用python代码库开展业余爱好项目,并希望设置某种forms的持续集成(例如,每次办理登机手续时都要运行一组testing用例,并在每次办理登机手续时发送唠叨的电子邮件给负责人testing失败)类似于CruiseControl或TeamCity。

我意识到我可以在大多数VCS中使用钩子来做到这一点,但是这要求testing在与版本控制服务器相同的机器上运行,这不像我想的那样优雅。 有没有人有任何build议,适合Python代码库的小型,用户友好的,开源的持续集成系统?

我们在工作中运行Buildbot – Trac ,因为我的代码库不是发布周期的一部分,所以我没有用太多。 但是,我们在不同的环境(OSX / Linux / Win)上运行testing,并发送电子邮件 – 它是用python编写的。

哈德森有一种可能性。 它是用Java编写的,但是它与Python项目是集成的:

哈德森拥抱Python

但是我从来没有尝试过。

更新 ,2011年9月:商标纠纷哈德森已更名为jenkins 。)

其次是Buildbot – Trac整合。 您可以在Buildbot网站上find更多关于集成的信息 。 在我以前的工作中,我们编写并使用了他们提到的插件(tracbb)。 插件做的是重写所有的Buildbot的URL,所以你可以在Trac中使用B​​uildbot。 ( http://example.com/tracbb )。

Buildbot的真正好处在于configuration是用Python编写的。 您可以将自己的Python代码直接集成到configuration中。 编写自己的BuildSteps来执行特定任务也很容易。

我们使用BuildSteps从SVN获取源代码,拉取依赖关系,将testing结果发布到WebDAV等等。

我写了一个X10接口,所以我们可以发送带有生成结果的信号。 当build设失败,我们打开一个红色的熔岩灯。 当build造成功,一个绿色的熔岩灯亮起。 美好时光 :-)

我们同时使用Buildbot和Hudson进行Jython开发。 两者都是有用的,但有不同的优点和缺点。

Buildbot的configuration是纯粹的Python,一旦你掌握了它,就很简单了(查看epydoc生成的API文档以获得最新的信息)。 Buildbot使定义非testing任务和分发testing人员变得更加容易。 但是,它确实没有单独的testing的概念,只是文本,HTML和汇总输出,所以如果你想有多级可浏览的testing输出等等,你必须自己构build它,或者只是使用Hudson。

哈德逊从整体结果进入testing套件和单独testing的支持非常好, 对于构build之间的testing输出进行比较也是很好的,但是分布式(主/从)的东西比较复杂,因为你也需要一个Java环境。 同样,哈德森也不太容忍主从机之间的片状networking连接。

因此,为了获得这两个工具的好处,我们运行一个Hudson实例,捕获常见的testing失败,然后使用Buildbot进行多平台回归。

以下是我们的实例:

  • Jython Hudson
  • Jython buildbot

我们正在使用与trac集成的Bitten 。 它是基于python的。

TeamCity有一些Python 集成 。

但TeamCity是:

  • 不是开源的
  • 不小,而是function丰富
  • 对于中小型团队来说是免费的。

对于较小的代码库,我有很好的Travis-CI经验。 主要优点是:

  • 安装程序在不到configuration文件的一半屏幕内完成
  • 你可以做你自己的安装或者只是使用免费的托pipe版本
  • Github仓库的半自动设置
  • 网站上不需要帐户; 通过githublogin

一些限制:

  • Python不被支持作为第一类语言(到编写的时候;但是可以使用pip和apt-get来安装python依赖;请参阅本教程 )

  • 代码必须在github上托pipe(至less在使用正式版时)