用例:
CI服务器轮询一些VSC存储库并为每个修订版运行测试套件。如果提交了两个或多个修订版,即使在相对较小的时间间隔内,我希望CI服务器将每个修订版放入队列中,为每个版本运行测试,存储结果,并且永远不再为这些提交运行测试。我不希望CI服务器并行启动作业,以避免在许多同时作业的情况下出现性能问题和崩溃。
哪个CI服务器能够处理此问题?
我的另外一个不那么重要的要求是我使用Python并且希望使用用Python编写的软件,因此我查看了Buildbot项目,我特别想看看这个工具的评论是否可用总的来说,它能够取代像Travis或Jenkins这样的大多数流行解决方案。
答案 0 :(得分:8)
我用jenkins来做这件事。 (主要是subversion,c / c ++ build以及bash / python脚本作业)
jenkins中VCS / SCM更改的最简单和默认处理方法是轮询设定时间内的更改。如果有任何更改,则会触发构建。在使用此方法时,可以在构建中包括多个提交(例如,如果两个提交一起完成)。 Jenkins显示链接回到scm和scm更新以及显示构建日志,您可以轻松配置构建输出和测试结果显示。
您使用的是什么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)
答案 3 :(得分:2)
对于 Buildbot 和 Python ,您可以按配置协调并行构建,例如:
建模并行流程:步骤
svn up
configure
make
make test
make dist
此外,您还可以尝试使用Triggerable scheduler作为执行步骤U,V,W的构建器。
来自docs:
Triggerable调度程序等待触发步骤触发(请参阅 触发调度程序)在另一个版本中。该步骤可以选择等待 为调度程序的构建完成。这提供了两个优点 在依赖的调度程序。
<强>参考文献:强>
答案 4 :(得分:2)
Jenkins和Hudson有一个 Throttle Concurrent Builds Plugin 。它允许您指定每个作业的并发构建数。这就是它在插件页面上所说的内容:
应该注意的是,默认情况下,Jenkins从不并行执行相同的Job,因此如果使用默认值,则不需要实际控制任何内容。但是,如果需要,可以选择执行并发构建,这允许并行多次运行相同的作业,当然如果使用下面的类别,您还可以限制多个作业。)
还有Gitlab CI,一个非常好的现代Ruby项目,它使用 runners 来分发构建,所以你可以将跑步者的数量限制为1以获得你所追求的效果。它与Gitlab紧密集成,所以我不知道将它用作独立服务有多难。
www.gitlab.com
www.gitlab.com/gitlab-ci
要仅针对每个修订运行一次测试,您可以执行以下操作: