CI工作跨越多个阶段

时间:2018-04-26 14:07:08

标签: gitlab-ci

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

如下图所示:

Diagram showing one process spanning multiple stages

我们的想法是,slow_build应该尽早开始build,但test并不依赖于它,因此test应该能够以build开头build完成后。

(请注意,这是一个简化:每个阶段都有多个进程并行运行,否则我可以将test<div class="container"> <div class="row no-gutters d-block"> <div class="col-md-4 float-left"> <div class="a"> A </div> </div> <div class="col-md-8 float-left"> <div class="b"> B </div> </div> <div class="col-md-8 float-right"> <div class="c"> C </div> </div> <div class="col-md-4 float-left"> <div class="d"> D </div> </div> </div> </div> 捆绑在一起。)

1 个答案:

答案 0 :(得分: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

由于 lint 作业不需要任何东西,它会立即运行,linux:buildmac:build 也是如此。但是,如果 linux:buildmac:build 之前完成,则 linux:rspeclinux:rubocop 都可以开始,甚至在 mac:buildbuild 阶段完成之前。

像往常一样,如果没有 needs 关键字,production 作业需要在开始之前完成所有先前的作业。

在管道中使用 needs 时,您还可以在管道视图中查看作业的有向无环图。有关更多信息,请访问:https://docs.gitlab.com/ee/ci/directed_acyclic_graph/index.html