travis-ci.org 油门是如何构建的?

How does travis-ci.org throttle builds?

我的公司正在使用 travis-ci.org(开源软件的免费版本)自动向我们在 github 上的存储库构建拉取请求。我们有大约 20 个人全天向同一个回购提交拉取请求,并且每个请求都构建在一个矩阵中,每个构建包含两个构建作业。我们经常注意到,构建被发送到 travis 后需要几分钟——有时甚至几个小时——才能开始。 (症状:构建出现在travis上,但是定时器没有启动,并且有一段时间没有控制台输出。)

我认为发生这种情况是因为 travis-ci.org 已备份或限制构建。首先

如果是这样,构建是如何受到限制的?

构建是否受到限制

了解这一点将使我们能够在 travis-ci.org 设置的约束条件下优化我们的构建完成时间(希望这与作为免费用户玩得好一致)。

我将 Travis 用于个人用途,而且我每天的构建很少。我经常注意到构建开始前有几分钟的延迟,所以这可能是正常的。经过一些研究,我找不到关于 Travis 极限的非常好的数字,但它们肯定有一些 (source). This is a GitHub issue asking if they can limit builds per project so they do not hit their user/company limit as quickly. This means there is some limit enforced. The free version is described as "Fair Use" so I am not exactly sure what that means. If your builds are running slow I would look into speeding up the build 所以你在达到极限之前充分利用它们。

抱歉,我无法提供实际数字,但您应该尽最大努力按原样优化构建。我猜他们可能没有任何硬性限制,因为他们可能仍在发展和改变他们的系统可以处理的内容。

我找到的一些数字:

我会继续寻找限制数字并更新我的答案if/when我罚款他们。

在 Travis CI 上,所有构建都会排队,与您的登录名或存储库无关。

此外,如果您查看 Travis CI 状态历史记录(此处 http://www.traviscistatus.com/history), you will see that they noticed and investigated the issue you described on April 7th and April 8th. They also made an update of their Build environment on April 9th (http://docs.travis-ci.com/user/build-environment-updates/2015-04-09/)。在更新过程中,要处理的队列正在增长,必须稍后处理。 这些因素的结合可能是您经历长时间延误的根源。

希望对您有所帮助。

如果您查看 travis-ci 状态页面 (http://www.traviscistatus.com/),您会注意到 "Active Linux Builds for Open Source projects" 会周期性地达到最大值。根据 travis 私有构建系统的工作方式(所有 "Build Jobs" 的单个队列一次不超过 x 运行ning),我怀疑他们对所有开源构建作业都有一个队列。

您可以将您的构建分成多个作业,每个作业都可以更快地完成。当 Travis 处于轻度使用状态时,它们会 运行 并行并且您的构建将 return 更快,但是当 Travis 运行 宁许多其他构建时,您的构建可能只会 运行 顺序。

查看您发布的存储库中的 .travis.yml,您可能会注意到通过添加 apt 和 pip 缓存 (http://docs.travis-ci.com/user/caching/). You should also consider switching to Travis' new container-based infrastructure (http://docs.travis-ci.com/user/workers/container-based-infrastructure/) 可以显着提高性能。但是,只有当您能够替换构建中的 sudo apt-get 命令时,这才会起作用。

Travis-CI 目前提供 five concurrent builds for open source projects, and this is counted against all repositories per GitHub login or organization, as the Apache Software Foundation discovered。 Travis 将所有项目和拉取请求中的每个 "build job" 计算到并发构建的这个限制。