gitlabRunner并发如何工作?

Sli*_*mer 4 gitlab gitlab-ci gitlab-ci-runner

Q1:两者之间有什么区别

concurrent = 3

[[runners]]
  ..
  executor = "shell"
Run Code Online (Sandbox Code Playgroud)

concurrent = 3

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

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

[[runners]]
  ...
  executor = "shell"
Run Code Online (Sandbox Code Playgroud)

问题2:...

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

问题3:它们之间的关系...

runners.limitrunners.request_concurrencyconcurrent

谢谢

Aur*_*ang 7

Gitlab的跑步者文档将其描述为:

(...)孤立的(虚拟)机器,这些机器通过GitLab CI的协调器API来接管工作

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

当您在定义config.toml一个[[runner]]部分,你配置一个亚军和设置应该如何处理作业执行请求。在您的问题中,您提到了其中两个“如何处理作业执行请求”设置:

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

另外,有些设置全局适用于计算机。在您的问题中,您提到其中之一:

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

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

Q1:

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

Q2:

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

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

此外,请注意,一个executor只定义了如何经营你的工作。它不是唯一定义跑步者的东西,也不是“工人”的代名词。工作的人是您的跑步者及其子流程。

第三季度:

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

参考文献

为了更好地理解,我真的建议您阅读有关自动缩放算法和参数的文章

最后,我认为您可能会发现有关在同一服务器上并行运行运行程序的问题很有用。

  • 我仍然不清楚“limit”和“request_concurrency”之间的区别。 (7认同)
  • 感谢您的回答。验证我是否理解正确:如果我有 concurrent=1 和 3 个工人,那么他们中只有 1 个可以接受工作,而其他 2 个将空闲。另一方面,当我有并发 = 3,并且每个限制 = 1 的 3 个工人时,那么单台机器可以并行运行 3 个作业,但每个工人只能执行 1 个作业。正确的? (5认同)
  • 如果这台机器上只定义了一个 runner,并且 `concurrent=3, limit=3`,那么 `request_concurrency=1 或 3` 有什么区别? (2认同)