您可以设置Gitlab CI阶段,以便其他阶段不等待它完成吗?

时间:2017-11-14 12:54:23

标签: continuous-integration gitlab gitlab-ci gitlab-ci-runner

假设我在.gitlab-ci.yml中定义了这些阶段:

stages:
    - build
    - analysis
    - tests
    - deploy
    - post-deploy

由于analysis需要花费大量时间而且我并不关心结果(我也设置了allow_failure: true) - 是否有可能以某种方式定义以启动analysis和然后立即启动下一阶段tests

我在official docs上找不到任何关于类似主题的引用。

编辑:

主要思想是所有其他阶段都可以像analysis甚至不存在一样运行。如果我将analysis置于与tests相同的阶段,则analysistests将同时运行,但是deploy将不会启动两人都完成了。这不好。我希望tests完成,然后在deploy完成之后启动deploy我想要启动post-deploy。我真的不关心analysis结果,我只是想触发它并继续部署。

3 个答案:

答案 0 :(得分:2)

根据定义,阶段是连续的。一个阶段将陆续执行。

如果要并行处理分析和测试,则必须在同一阶段定义它们。

stages: 
 - build
 - processing
 - deploy
 - ...

analysis:
 stage: processing
 ...


tests:
 stage: processing
 ...

https://docs.gitlab.com/ce/ci/yaml/README.html#stage

答案 1 :(得分:0)

在较新的GitLab版本中有一种解决方法:Trigger a child-pipeline用于您不想等待的作业。默认情况下,子管道启动后将立即返回“成功”,如果要等待子管道中的作业,则需要显式set the strategy。因此,偶然这正是您想要的行为。

UI目前不是最好的,但是我很肯定它将在以后的GitLab版本中得到改善。毕竟这是一种解决方法,但应该可以完成工作。

答案 2 :(得分:0)

从 v12.8 开始,您可以使用 needs: [] 立即启动作业。文档:https://docs.gitlab.com/ee/ci/yaml/#needs