gitlab如何决定使用哪个runner来完成工作

How does gitlab decide which runner to use for a job

如果一个项目有多个运行ner,gitlabci如何decide运行ner使用哪个?

我有一个综合 gitlab 8.6.6-ee 安装,配置了 2 个 运行ners。 运行 用户完全相同(docker 图像、配置等),只是它们 运行 在不同的计算机上运行。

如果他们都闲着,并且有一份工作,他们中的任何一个都可以运行,哪个会运行?

Gitlab CI 将工作分配给那些 运行 可用的人。如果 运行 工作人员因为忙而没有空,那么 Gitlab CI 将工作分配给其他可用的 运行 工作人员。在您的情况下,它将始终将工作分配给第一个 运行ner(无论是谁)。

如果你想在特定的 runner/mashine 上指定执行然后看看我的 post

在我看来,如果您正在使用 docker,不知道哪个 运行ner 将 运行 您的构建是件好事,因为那是 runner/docker 架构的好处。

要添加到 Rubinum 的答案中,'first' 运行ner 将是第一个符合所有条件的 运行ner。例如,标签可以限制 运行 某些工作 运行 的人。

Runners 每 X 秒查询一次 gitlab 服务器以检查是否有构建。如果有一个构建排队并且多个满足条件,第一个询问的将获胜

更新回复评论:

Runners 通过 CI API http://docs.gitlab.com/ce/ci/api/builds.html 进行通信以获取构建状态。这最终将意味着它会或多或少地随机选择 运行ner,这取决于它完成最后一项工作的时间和 x 它正在等待检查的 ms 数量。

完整回答问题:

归功于 BM5k after digging through the code and finding that x = 3 seconds based on this and this。还发现:

which machine a docker+machine runner will use once that runner has been selected) reveals that the machine selection is more or less (effectively) random as well