GitLab Runner - 如何一次只允许一个管道运行

Shu*_*oel 22 gitlab gitlab-ci gitlab-ci-runner

我是 GitLab 新手,面临一个问题:如果我在同一个 gitlab-runner 上同时触发两个管道,它们都会并行运行并导致失败。我想要的是将运行限制为一次只运行一个管道,而其他管道则在队列中运行。

我已经在 config.toml 中设置concurrent = 1并重新启动了运行器,但没有帮助。我的最终目标是防止runner上多管道运行。

谢谢。

phi*_*hag 14

在作业中设置resource_group,并为所有其他应阻止的任务指定唯一的名称。

文档中的示例:

deploy-to-production:
  script: deploy
  resource_group: production
Run Code Online (Sandbox Code Playgroud)

  • 根据我的阅读,这在某些情况下不起作用。如果您有一个包含多个作业的管道,并且将所有作业设置为同一资源组,则 GitLab 无法确保一个管道在另一个管道启动之前完成。相反,它确保一次只运行一项作业。当一个作业完成时,它可以从任一管道中选择任何作业来运行下一个。 (6认同)

小智 5

@phihag 的答案也适用于具有多个作业的管道。唯一缺少的是 资源组的特定配置
: 设置 process_mode=oldest_first

curl --request PUT --data "process_mode=oldest_first" \
     --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/resource_groups/production"
Run Code Online (Sandbox Code Playgroud)


Nic*_*ter -7

将配置的runners 部分limit中的关键字设置为 1。

\n\n

limit:

\n\n
\n

限制此令牌可以同时处理的作业数量。0(默认)仅表示不限制\xe2\x80\x99t

\n
\n\n

并重新启动你的跑步者

\n

  • 正如文档所述,这限制了作业的并发性,而不是管道的并发性。Runner 仍然可以在执行第一个管道的所有作业之前启动第二个管道的第一个作业。再深入一点,我想你总会遇到这个问题,这个问题已经被推迟了很长时间:https://gitlab.com/gitlab-org/gitlab/-/issues/15536 (9认同)