gitlabRunner并发如何工作?

时间:2019-02-05 12:24:43

标签: gitlab gitlab-ci gitlab-ci-runner

Q1:之间有什么区别

concurrent = 3

[[runners]]
  ..
  executor = "shell"

concurrent = 3

[[runners]]
  ...
  executor = "shell"

[[runners]]
  ...
  executor = "shell"

[[runners]]
  ...
  executor = "shell"

问题2:对...有意义吗?

在具有全局workers的单个运行程序上有3个相同类型的执行者(concurrent = 3)吗?还是具有全局concurrent = 3的单个执行者可以安全地并行执行多个作业?

Q3:它们之间的关系...

runners.limitrunners.request_concurrencyconcurrent

谢谢

1 个答案:

答案 0 :(得分:4)

Gitlab's documentation on runners describes them as:

  

(...)隔离的(虚拟)机器,可通过GitLab CI的协调器API来接收作业

因此,每个跑步者都是一个孤立的进程,负责拾取作业执行请求并根据预定义的配置进行处理。作为独立的流程,每个运行者都具有创建“子流程”(也称为机器)以运行作业的能力。

config.toml中定义[[runner]] section时,您正在配置运行程序并设置它应如何处理作业执行请求。 在您的问题中,您提到了两个“如何处理作业执行请求”的设置:

  1. limit:“限制可以同时处理多少个作业”。换句话说,跑步者可以创建多少个“子流程”以同时执行作业;
  2. request_concurrency:“限制来自GitLab的对新作业的并发请求数”。换句话说,跑步者可以同时从GitLab CI作业队列中获取多少作业执行请求。

此外,还有一些settings that apply to a machine globally。在您的问题中,您提到其中之一:

  1. concurrent:“限制全局可以同时运行的作业数。这是使用所有已定义的运行器的作业数的最高上限”。换句话说,它限制了可以同时运行作业的“子流程”的最大数量。

因此,请记住跑步者的子流程之间的差异,以及特定跑步者设置和全局机器设置之间的差异:

第一季度:

区别在于,在您的第一名示例中,您有一名跑步者,在您的第二名示例中,您具有三名参赛者。值得一提的是,在这两个示例中,您的计算机仅允许同时运行3个作业。

第二季度:

不仅单个跑步者可以安全地并发运行多个作业,而且还可以控制您希望它处理的作业数量(使用上述limit设置)。

此外,在同一台机器上运行类似的运行程序也没有问题。如何定义跑步者的配置取决于您和您的基础架构功能。

另外,请注意an executor仅定义了如何运行您的工作。它不是唯一定义跑步者的东西,也不是“工人”的代名词。工作的人是您的跑步者及其子流程。

Q3:

总结:您可以在同一台机器上定义一个或多个工作程序。每个过程都是一个孤立的过程。跑步者的limit是跑步者过程中可以创建多少个子过程来同时运行作业。跑步者的request_concurrency是跑步者可以从Gitlab CI作业队列中处理多少个请求。最后,将值设置为concurrent将限制在计算机中运行的一个或多个运行程序中同时可以在计算机上执行多少个作业。

参考

为了更好地理解,我真的建议您阅读有关Autoscaling algorithm and parameters的信息。

最后,我认为您可能会发现有关如何run runners in parallel on the same server有用的问题。