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