我们刚刚从 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)
你可以定义哪些做同样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
| 归档时间: |
|
| 查看次数: |
2596 次 |
| 最近记录: |