CI/CD

Posted by wantu on September 10, 2023

介绍

CICD 代表持续集成(Continuous Integration)和持续交付(Continuous Delivery),是一种软件开发实践,旨在通过自动化软件构建、测试和部署的过程,实现对软件的快速、可靠的交付。

CICD 工具集包括各种自动化构建工具、测试工具、部署工具,以及用于监视和日志记录的工具。流行的 CICD 工具包括 Jenkins、Travis CI、GitLab CI/CD、CircleCI 等。

GitLab CI/CD

前置条件

  1. 可用的 Runner
  2. 项目权限

GitLab Runner

本质来说,Runner 就是一个可以提供执行脚本环境的环境。它会根据.gitlab-ci.yml 配置文件来执行一连串的任务。Runner 可以被灵活的安装在服务器、Docker 上。

开始

在安装配置好 Runner 后,创建.gitlab-ci.yml 文件,可用在其中配置 GitLab CI/CD 的特定指令。 文件中定义:

  1. Runner 应执行的作业的结构和顺序
  2. Runner 在遇到特定条件时做出的决定

基本流程

  1. 研发推送代码
  2. 触发 GitLab CI
  3. runner 执行预定义的脚本

概念

  1. 流水线(Pipelines)。顶级组件。 流水线包括: 工作(Jobs)。定义做什么。例如,编译或测试代码的作业。 阶段 (Stages)。定义何时运行作业。例如,在编译代码的阶段之后运行测试的阶段。

  2. 作业(Job)。流水线配置从作业开始。作业是.gitlab-ci.yml 文件中最基本的元素。 工作是:定义了约束条件,说明它们应该在什么条件下执行。 具有任意名称的顶级元素,并且必须至少包含 script 子句。 不限制可以定义的数量 Alt text
  3. 环境变量(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