【问题标题】:Continuous Integration System for a Python CodebasePython 代码库的持续集成系统
【发布时间】:2010-09-05 06:12:16
【问题描述】:

我开始使用 Python 代码库从事一个爱好项目,我想建立某种形式的持续集成(即每次签入时运行一系列测试用例类似CruiseControlTeamCity

我意识到我可以在大多数 VCS 中使用钩子来做到这一点,但这需要测试与版本控制服务器在同一台机器上运行,这并不像我想要的那样优雅。有人对适合 Python 代码库的小型、用户友好、开源持续集成系统有什么建议吗?

【问题讨论】:

    标签: python continuous-integration extreme-programming


    【解决方案1】:

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

    Hudson embraces Python

    不过,我自己从未尝试过。

    更新,2011 年 9 月:在商标争议之后,Hudson 已更名为 Jenkins。)

    【讨论】:

    • @Joe,很好的推荐。 @Matt 如果您是 python 人,请不要让 Hudson 是用 Java 编写的事实吓跑您。设置和运行非常简单。它与 pylint 和 coverage.py 集成。我让它在我的项目中运行并且喜欢它。 BuildBot 更简单。要设置它并运行 Hudson,这是一个命令。 java -jar hudson.war 这是我见过的最好的设置帖子:rhonabwy.com/wp/2009/11/04/…
    • 用 Java 编写的 Hudson 与您使用的用 C++ 编写的编辑器一样重要!它只是一个写得很好、易于设置且功能齐全的 CI 工具。 Python 可以很好地集成,nosetests --with-xunit --with-coverage,带有“Violations”插件的 pylint,以及用于覆盖的“Cobertura”
    • @dbr:不完全正确。编写某物的语言通常会影响它最适合使用的软件……尤其是构建系统。大约 2 年前,当我查看 Hudson 时,它只需要 JUnit 的 XML 格式的单元测试输出;我的 Python 单元测试套件没有这样做。但如果我的项目是用 Java 编写的,它就会开箱即用。无论如何,从那时起,Hudson 和 Python 工具的集成似乎都取得了长足的进步,我对此表示感谢。
    • 是的 jenkins/hudson 非常好,设置起来轻而易举。
    【解决方案2】:

    我们在工作中运行Buildbot - Trac。我没有过多地使用它,因为我的代码库还不是发布周期的一部分。但是我们在不同的环境(OSX/Linux/Win)上运行测试,它会发送电子邮件——而且它是用 Python 编写的。

    【讨论】:

      【解决方案3】:

      第二个 Buildbot - Trac 集成。您可以在Buildbot website 上找到有关集成的更多信息。在我之前的工作中,我们编写并使用了他们提到的插件 (tracbb)。 该插件所做的是重写所有 Buildbot url,以便您可以在 Trac 中使用 Buildbot。 (http://example.com/tracbb)。

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

      我们使用 BuildSteps 从 SVN 获取源、拉取依赖项、将测试结果发布到 WebDAV 等等。

      我编写了一个 X10 接口,以便我们可以发送带有构建结果的信号。当构建失败时,我们打开了一盏红色熔岩灯。构建成功后,绿色的熔岩灯亮了。美好时光:-)

      【讨论】:

        【解决方案4】:

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

        Buildbot 的配置是纯 Python 的,一旦掌握了它就非常简单(查看 epydoc 生成的 API 文档以获取最新信息)。 Buildbot 可以更轻松地定义非测试任务和分配测试人员。但是,它确实没有单独测试的概念,只有文本、HTML 和摘要输出,所以如果你想拥有多级可浏览的测试输出等,你必须自己构建它,或者只使用 Hudson。

        Hudson 为从整体结果向下钻取到测试套件和单个测试提供了极好的支持;它也非常适合比较构建之间的测试输出,但是分布式(主/从)的东西相对更复杂,因为您也需要在从属上的 Java 环境;此外,Hudson 对主从之间的不稳定网络链接的容忍度较低。

        因此,为了获得这两种工具的优势,我们运行一个 Hudson 实例,它会捕获常见的测试失败,然后我们使用 Buildbot 进行多平台回归。

        这是我们的实例:

        【讨论】:

        • 抱歉,我不保留那个:-)
        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          TeamCity 有一些 Python integration

          但 TeamCity 是:

          • 不是开源的
          • 不小,但功能丰富
          • 对中小型团队免费。

          【讨论】:

            【解决方案7】:

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

            • 设置在不到半屏的配置文件中完成
            • 您可以自行安装或只使用免费托管版本
            • github 存储库的半自动设置
            • 网站上不需要帐户;通过github登录

            一些限制:

            • 不支持 Python 作为第一类语言(截至撰写本文时;但您可以使用 pip 和 apt-get 安装 python 依赖项;请参阅this tutorial

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

            【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-06
            • 1970-01-01
            相关资源
            最近更新 更多