1.流水线
流水线是一组分阶段执行的JOB,一个stage中的所有job都是并行执行的,如果一个stage中的所有job都执行成功了,那么它将流转到下一个stage,如果其中的一个job失败,那么下一个阶段通常不会执行,
2.流水线的类型
有三种类型的pipeline通常使用“pipeline”的简写。人们经常谈论它们,好像每一个都是“pipeline”,但实际上,它们只是一个完整管道的一部分。
CI Pipeline: 图上的两个stage 是在.gitlab-ci.yml文件中定义的。
Deploy Pipeline :图中的两个stage是定义在.gitlab-ci.yml文件中的,例如部署到staging环境 部署到生产环境
Project Pipline: 通过API触发的跨项目CI依赖关系,特别是对于微服务,但也适用于复杂的构建依赖项:例如API->前端、ce/ee->omnibus。
3.Pipeline可容纳多个开发工作流:
Branch Flow (e.g. different branch for dev, qa, staging, production).
Trunk-based Flow (e.g. feature branches and single master branch, possibly with tags for releases).
Fork-based Flow (e.g. merge requests come from forks).
对于job可以取消重试删除
4. .gitlab-ci.yml
Gitlab Runner 使用.gitlab-ci.yml来管理项目的Job,从7.12版开始,GitLab CI使用YAML文件(.gitlab-ci.yml)对项目进行流水线的配置。它被放在根部并包含如何构建项目的定义
下面讲解yml里面的几个重要的元素
Jobs
.gitlab-ci.yml 指定无限数量的作业,这些作业定义为具有任意名称的顶级元素,并且始终必须至少包含script子句 每一个job都是独立运行的,每个job必须有一个唯一的名称,但是有一些保留关键字不能用作job名称:
job下面script元素是必须的:
job1:
script: echo "job1"
job2:
script: echo "job2"
before_script and after_script:
job1:
script: echo "job1"
job2:
script: echo "job2"
before_script:
- echo "before_script"
before_scrip 用于定义应该在所有job之前运行的命令,包括部署job,但在恢复工件之后。它可以是数组或多行字符串。
可以看到在job2之前也运行了这个脚本
stages and stage:
阶段用于定义作业可以使用的阶段,并且是全局定义的。阶段中元素的顺序定义了作业的执行顺序。同一阶段的job并行运行,下一阶段的作业在前一阶段的作业之后运行
如果.gitlab-ci.yml中未定义任何阶段,则默认情况下允许将build,test和deploy用作作业的阶段。
如果作业未指定阶段,则为该作业分配测试阶段。
stage 是按job定义的,并且依赖于全局定义的stages。 它允许将job分为不同的阶段,并且同一stage的job可以并行执行。
如:
stages:
- build
- test
- deploy
job1:
stage: build
script: echo "job1"
job2:
stage: build
script: echo "job2"
job3:
stage: test
script: echo "job3"
job4:
stage: deploy
script: echo "job4"
before_script:
- echo "before_script"
script:
script 脚本是作业所需的唯一必需关键字。 这是一个shell脚本 由runner执行,此参数还可以使用数组包含几个命令,脚本里面使用特殊符号需要注意