GitLab CI/CD关键词(二):流水线阶段stages,作业所属阶段stage


转载自:https://cloud.tencent.com/developer/article/1976368

简介

本篇文章向大家介绍二个关键词,一个是用于定义流水线阶段的stages,一个是定义作业所属阶段的stage。后者的取值范围为前者的值。二者规定了流水线中作业的运行顺序。

stages

关键词stages是一个全局关键词,用于定义当前流水线包含多少个阶段。它的值是一个数组,数组的顺序规定的每一个阶段的运行顺序。如下例

stages:
  - Annie
  - Anivia
  - Ezreal
  - Trundle
CorkiJob:
  stage: Ezreal
  script: echo 'Hello Janna'

上面的例子,定义了四个阶段,那么流水线中所有的作业,它们的阶段都必须从这四个值中选择。 并且Annie阶段的作业会优先执行,如果该阶段有多个作业,则会并发执行(如果runner配置并行的话)。当Annie阶段的所有作业都运行完成后,并且都是成功状态,接着便运行下一阶段Anivia阶段的作业。以此类推。

.gitlab-ci.yml文件中,stages并不是必填的,它默认有五个值,如下

stages:
  - .pre
  - build
  - test
  - deploy
  - .post

除了使用stages来限定作业的运行顺序,还可以使用关键词needs,后续会讲解到。

同一阶段的作业,如果有一个运行失败,不会影响另一个运行。 stages的值可以是中文。 如下

stages:
  - 半
  - 泽
  - 直
  - 树
  
孟作业:
  stage: 直
  script: echo '雅人叔'

stage

关键词stage是一个作业关键词,只能定义在作业下。用于定义当前作业属于哪个stages阶段。作业的stage可以省略,stage的默认值为test。但如果定义的stages没有test 则会报错。

在最新版本的GitLab。即使 stages中没有定义 .pre和.post 两个阶段。但在作业中依然可以直接使用。如下图:

stages:
  - build
  - test

GalioJob:
  stage: build
  script:
    - echo "All the splendor in the world is not worth a good friend."

AkaliJob:
  stage: .pre
  script:
    - echo "There is a great different between exposure of the mind and that of the body."

LuxJob:
  stage: .post
  script:
    - echo "The greater a man is, the more distasteful is praise and flattery to him.."

.pre阶段的作业会优先运行,而.post阶段的作业会最后运行。所以上例的运行顺序为AkaliJob => GalioJob => LuxJob

相关