介绍
CICD 代表持续集成(Continuous Integration)和持续交付(Continuous Delivery),是一种软件开发实践,旨在通过自动化软件构建、测试和部署的过程,实现对软件的快速、可靠的交付。
CICD 工具集包括各种自动化构建工具、测试工具、部署工具,以及用于监视和日志记录的工具。流行的 CICD 工具包括 Jenkins、Travis CI、GitLab CI/CD、CircleCI 等。
GitLab CI/CD
前置条件
- 可用的 Runner
- 项目权限
GitLab Runner
本质来说,Runner 就是一个可以提供执行脚本环境的环境。它会根据.gitlab-ci.yml 配置文件来执行一连串的任务。Runner 可以被灵活的安装在服务器、Docker 上。
开始
在安装配置好 Runner 后,创建.gitlab-ci.yml 文件,可用在其中配置 GitLab CI/CD 的特定指令。 文件中定义:
- Runner 应执行的作业的结构和顺序
- Runner 在遇到特定条件时做出的决定
基本流程
- 研发推送代码
- 触发 GitLab CI
- runner 执行预定义的脚本
概念
-
流水线(Pipelines)。顶级组件。 流水线包括: 工作(Jobs)。定义做什么。例如,编译或测试代码的作业。 阶段 (Stages)。定义何时运行作业。例如,在编译代码的阶段之后运行测试的阶段。
- 作业(Job)。流水线配置从作业开始。作业是.gitlab-ci.yml 文件中最基本的元素。 工作是:定义了约束条件,说明它们应该在什么条件下执行。 具有任意名称的顶级元素,并且必须至少包含 script 子句。 不限制可以定义的数量
- 环境变量(Variables)。变量通过使其他地方定义的值可供作业访问来帮助您自定义作业。它们可以硬编码在.gitlab-ci.yml 文件、项目设置中,也可以动态生成。
实践
理想的 CI/CD 流程:从功能分支和合并请求开始工作,并且仅在更改合并到默认分支时才触发 CI/CD,并且流水线的 styleCheck、test、build、deploy 等任务是顺序执行的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 全局变量
variables:
XXX: "xxx"
# 定义4个stage
stages:
- styleCheck
- test
- build
- deploy
style-check-job:
stage: styleCheck
only: # 此job匹配哪个branch或者tag或者trigger
- dev #- <一个匹配日常分支的正则>
except:
- master # 此job忽略tag
# 每一个 job,需要定义一个 image
image: xxx镜像地址xxx
script:
- npm i
- npm run eslint
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
test-job:
# 注明该任务在test阶段执行
stage: test
script:
- npm install --registry=https://registry.npmmirror.com
- npm run test
build-job:
# 注明该任务在build阶段执行
stage: build
script:
- npm run build
deploy-job:
# 注明该任务在deploy阶段执行
stage: deploy
script:
- npm deploy