⏳ CICD 指的是持续集成/持续交付(continuous integration/ continuous delivery),是为了满足互联网、金融公司快速迭代项目的需要而提出的一种软件开发思想。大致思路是通过编写自动化脚本,使新代码必须通过一些规则核查后才能部署上线。
Gitlab 是实现了 CICD 流程的一个优秀平台,通过在项目的根目录下编写 .gitlab-ci.yml
文件来配置 CI 流程,主要描述项目被如何编译。
一、stages
stages 参数定义了代码若要通过流水线需经历的阶段,供所有作业使用。
若文件中未定义 stages,则默认包含 build、test 和 deploy 三个阶段。
stages:
- lint
- test
- build
以上就是一个 stages 参数定义,在 gitlab 中的效果如下,表示要分别通过这三个阶段的检验才算发布成功,因此被形象地称为流水线。
二、job
job 可以翻译为 “作业”,它是 .gitlab-ci.yml
文件的基本单元。它的基本定义方式是:
job_name:
stage: lint
script:
- xxx
- xxxx
other_param: xxx
首先声明作业名称,然后在内部声明它的一些参数。如上面声明的一个参数是 stage
,表明该 job 被绑定到 lint
阶段。
job 是文件中的顶级元素,且至少包含一条 script
语句。若一个 job 未显式地关联某个阶段,则默认关联至 test
阶段。
2.1 作业中的其它参数
- image 指定使用的 Docker 镜像;
- before_script 定义在作业之前要执行的命令,如安装依赖、打印调试信息之类的事情;
- variables 根据位置不同可以分为全局变量和作业级局部变量,局部变量会在作业内部覆盖同名全家变量;
# 全局变量
variables:
DATABASE: xxxxxxxx
# 作业级局部变量
job_name:
variables:
DATABASE: xxxxx
variables 中存在与 git 策略相关的特殊变量,如
GIT_SUBMODULE_STRATEGY
,表示如何导入 git 中的子模块。默认值为none
,即不导入子模块;normal
表示拉取子模块时只有最顶层的子模块会被导入;recursive
表示所有子模块都会被递归导入。
- retry 表示当作业失败时可以重新执行,只有 0、1、2 三个取值,它之下还可以配置
max
和when
两个属性,分别表示最大重试次数和何时重试;