哪个持续集成服务器能够排队作业?

时间:2014-05-19 21:23:44

标签: jenkins continuous-integration teamcity travis-ci buildbot

用例:

CI服务器轮询一些VSC存储库并为每个修订版运行测试套件。如果提交了两个或多个修订版,即使在相对较小的时间间隔内,我希望CI服务器将每个修订版放入队列中,为每个版本运行测试,存储结果,并且永远不再为这些提交运行测试。我不希望CI服务器并行启动作业,以避免在许多同时作业的情况下出现性能问题和崩溃。

哪个CI服务器能够处理此问题?

我的另外一个不那么重要的要求是我使用Python并且希望使用用Python编写的软件,因此我查看了Buildbot项目,我特别想看看这个工具的评论是否可用总的来说,它能够取代像Travis或Jenkins这样的大多数流行解决方案。

5 个答案:

答案 0 :(得分:8)

我用jenkins来做这件事。 (主要是subversion,c / c ++ build以及bash / python脚本作业)

jenkins中VCS / SCM更改的最简单和默认处理方法是轮询设定时间内的更改。如果有任何更改,则会触发构建。在使用此方法时,可以在构建中包括多个提交(例如,如果两个提交一起完成)。 Jenkins显示链接回到scm和scm更新以及显示构建日志,您可以轻松配置构建输出和测试结果显示。

https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-Buildsbysourcechanges

您使用的是什么VCS / SCM? Jenkins与很多VCS / SCM接口: https://wiki.jenkins-ci.org/display/JENKINS/Plugins#Plugins-Sourcecodemanagement

这个问题回答了如何让Jenkins构建在每个subversion提交上: Jenkins CI: How to trigger builds on SVN commit

答案 1 :(得分:6)

TeamCity是免费的(最多可以构建和构建代理)并且功能丰富。安装和配置非常简单,但可能需要一些时间才能找到适合您的方案。记录非常好:http://www.jetbrains.com/teamcity/documentation/

它是用Java编写的,但通过命令行执行本机支持许多工具,因此您可以使用它构建任何您想要的任何工具。 (我主要用于Ruby。)It understands the output of many testing tools;如果您没有使用其中一个,也许您可​​以模仿他们的输出。 It's quite extensible; it has a REST API and a plugin API

可以将其配置为在每次提交时构建,或构建在给定时间段内到达的所有提交,或以其他方式触发。文档:http://confluence.jetbrains.com/display/TCD8/Configuring+VCS+Triggers

默认情况下,它会启动单个构建代理,并在该构建代理上一次运行一个构建。您可以为速度运行更多构建代理。如果您不想在计算机上运行多个构建,则只在每台计算机上启动一个构建代理。

答案 2 :(得分:3)

  

我不希望CI服务器并行启动作业以避免   在许多同时工作的情况下,性能问题和崩溃。

在buildbot中,您可以使用max_build参数或locks

限制色情内容中正在运行的作业的数量

答案 3 :(得分:2)

对于 Buildbot Python ,您可以按配置协调并行构建,例如:

建模并行流程:步骤

svn up
configure
make
make test
make dist

此外,您还可以尝试使用Triggerable scheduler作为执行步骤U,V,W的构建器。

来自docs

  

Triggerable调度程序等待触发步骤触发(请参阅   触发调度程序)在另一个版本中。该步骤可以选择等待   为调度程序的构建完成。这提供了两个优点   在依赖的调度程序。

<强>参考文献:

答案 4 :(得分:2)

JenkinsHudson有一个 Throttle Concurrent Builds Plugin 。它允许您指定每个作业的并发构建数。这就是它在插件页面上所说的内容:

  

应该注意的是,默认情况下,Jenkins从不并行执行相同的Job,因此如果使用默认值,则不需要实际控制任何内容。但是,如果需要,可以选择执行并发构建,这允许并行多次运行相同的作业,当然如果使用下面的类别,您还可以限制多个作业。)

还有Gitlab CI,一个非常好的现代Ruby项目,它使用 runners 来分发构建,所以你可以将跑步者的数量限制为1以获得你所追求的效果。它与Gitlab紧密集成,所以我不知道将它用作独立服务有多难。

www.gitlab.com

www.gitlab.com/gitlab-ci

要仅针对每个修订运行一次测试,您可以执行以下操作:

  1. 构建
  2. 生成后
    • 检查构建版本是否在/ tmp / jenkins-test-run
    • 如果修订版在文件跳过测试中
    • 如果文件运行测试
    • 中的修订版
    • 如果我们运行测试,则在/ tmp / jenkins-test-run
    • 中写入ID