跨越多个阶段的 CI 作业

ano*_*nol 5 gitlab-ci

如何创建跨越多个阶段的 CI 作业以提高并行性?

如下图所示:

显示跨越多个阶段的一个过程的图表

这个想法是slow_build应该尽早开始build,但test不依赖于它,所以test应该能够在build完成后立即开始。

(注意,这是一个简化:每一级具有并行运行多个进程,否则我可以捆绑buildtest在一起。)

Ada*_*all 2

从 Gitlab 版本 12.2 开始,这已经成为可能。通过将关键字添加needs到依赖于其他作业的作业,阶段现在可以同时运行。该关键字的完整文档needs在这里,但文档中的示例如下: https: //docs.gitlab.com/ee/ci/yaml/#needs

linux:build:
  stage: build

mac:build:
  stage: build

lint:
  stage: test
  needs: []

linux:rspec:
  stage: test
  needs: ["linux:build"]

linux:rubocop:
  stage: test
  needs: ["linux:build"]

mac:rspec:
  stage: test
  needs: ["mac:build"]

mac:rubocop:
  stage: test
  needs: ["mac:build"]

production:
  stage: deploy
Run Code Online (Sandbox Code Playgroud)

由于该lint作业不需要任何东西,因此它会立即运行,就像linux:build和 一样mac:build。然而,如果在此linux:build之前完成mac:build,则两者linux:rspeclinux:rubocop可以开始,甚至在mac:build阶段build完成之前。

与往常一样,如果没有needs关键字,该production作业需要先完成所有先前的作业才能开始。

在管道中使用时needs,您还可以在管道视图中查看作业的有向非循环图。更多信息可以在这里找到:https ://docs.gitlab.com/ee/ci/directed_acirclic_graph/index.html