GitLab-CI:限制同一分支的并行管道

Sat*_*ish 5 gitlab

我们刚刚从 Jenkins 迁移到 GitLab-CI,并拥有一个具有多个阶段的管道,例如

build -> test 1 -> test 2 -> test 3 -> deploy
Run Code Online (Sandbox Code Playgroud)

工件在构建阶段产生,并在后续阶段使用,管道运行的总时间约为 2 小时。

我们的设置是这样的,如果同一分支的另一个管道并行启动,那么它会覆盖前一个管道创建的现有工件,并且前一个管道失败。

假设我们有一个用于分支的管道 #1master已经在运行,另一个管道 #2 在 30 分钟后启动master,然后管道 #1 的工件被删除并且失败。

对于 Jenkins,我们能够使用以下配置限制并行管道:

options {
    disableConcurrentBuilds()
}

Run Code Online (Sandbox Code Playgroud)

但我们无法找到 GitLab-CI 的类似配置。

我们已经尝试了评论部分中“@Simon Schrottner”建议的解决方案,但它仅适用于作业级别,而不适用于管道级别,我们为管道中的所有作业添加了resource_group,如下所示:

build:
  script: echo "build"
  resource_group: "group1"

test:
  script: echo "test"
  resource_group: "group1"

deploy:
  script: echo "deploy"
  resource_group: "group1"
Run Code Online (Sandbox Code Playgroud)

请注意,我们按顺序运行管道中的所有作业。

但是通过这种设置,而不是等待第一个管道完成所有作业,两个管道的作业都是随机执行的,如下所示

预期:管道 #2 等待管道 #1 的所有阶段完成

Pipe #1 : build(started) -> test -> deploy
Pipe #2 : build(waiting) -> test -> deploy

Pipe #1 : build(finished) -> test(started) -> deploy
Pipe #2 : build(waiting) -> test -> deploy

Pipe #1 : build(finished) -> test(finished) -> deploy(started)
Pipe #2 : build(waiting) -> test -> deploy

Pipe #1 : build(finished) -> test(finished) -> deploy(finished)
Pipe #2 : build(started) -> test -> deploy
Run Code Online (Sandbox Code Playgroud)

实际:作业从每个管道随机启动

Pipe #1 : build(started) -> test -> deploy
Pipe #2 : build(waiting) -> test -> deploy

Pipe #1 : build(finished) -> test -> deploy
Pipe #2 : build(started) -> test -> deploy

Pipe #1 : build(finished) -> test -> deploy
Pipe #2 : build(finished) -> test(started) -> deploy

Pipe #1 : build(finished) -> test(started) -> deploy
Pipe #2 : build(finished) -> test(finished) -> deploy
Run Code Online (Sandbox Code Playgroud)

Sim*_*ner 0

你可以定义哪些做同样resource_group的事情disableConcurrentBuilds

job:
  script: echo "test"
  resource_group: "group1"
Run Code Online (Sandbox Code Playgroud)

请参阅https://docs.gitlab.com/ee/ci/yaml/#resource_group

  • Resource_group 在作业级别工作,但不在管道级别工作,我们已经尝试过此操作,但它不起作用,我已在描述中添加了有关项目设置和预期行为的更多详细信息 (3认同)