CI(持续集成)和 CD(持续交付)是一种自动构建和部署代码的方法,CI 是将代码持续集成到存储库的主分支中,并对其进行自动测试的实践。CD 就是让代码达到可交付状态,这样只需点击一个按钮就可以部署它,或者在持续部署的情况下,如果所有测试都通过,则自动部署代码。
本文使用 GitLab 构建一个持续部署 pipeline,pipeline 将在每次提交到存储库时运行。完成本文的先决条件有两个:
- 一个运行 CentOS 7.5 的服务器
- GitLab 账号
注意:运行 gitlab 很费内存,请保障 4G 以上内存的机器
安装 Docker
在 CentOS 安装并运行 Docker 需要经过 3 个步骤
- 设置 Docker 存储库
cli
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
在新主机上首次安装 Docker 需要设置 Docker 存储库。之后,可以从存储库安装和更新 Docker。
- 安装 Docker 及相关软件
cli
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 运行 Docker
cli
systemctl start docker
通过运行 hello-world 镜像来验证 Docker 是否成功安装,命令如下:
arduino
docker run hello-world
上述命令将下载 hello-world 映像并在容器中运行它,如果得到下图所示的内容,则说明 Docker 成功安装且正在运行。
补充:安装docker的全部细节见 docs.docker.com/engine/inst...
注册 GitLab Runner
- 下载
执行下面的命令下载安装包
arduino
curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpm"
- 安装安装包
执行下面的命令安装上一步下载的 gitlab runner 安装包
css
rpm -i gitlab-runner_amd64.rpm
- 创建 runner
在 GitLab 中,runner 用于运行 CI/CD job,GitLab 有3种 runner,分别是 shared runner,group runner 和 project runner。这里我们创建 project runner,这类 runner 只能用于固定的项目,如下 3 个步骤:
a. 进入 GitLab 网页创建一个项目,命名为 Hello-CICD。 b. 进行 Hello-CICD,单击左侧栏的 Settings > CI/CD,展开主内容区的 Runners 部分,如下图所示:
c. 单击 New project runner,根据实际情况填写界面上显示的表单,填写完表单点击 Create runner 将得到如下图所示的内容:
创建完 runner 将得到一个 runner token,比如上图中的 glrt-sWq83HYCs27qczxxCsuh,该 token 将到注册 runner 的时候使用。
- 注册 runner
在服务器的命令行输入下述命令:
arduino
gitlab-runner register \
--non-interactive \
--url "https://gitlab.com/" \
--token "glrt-sWq83HYCs27qczxxCsuh" \
--executor "docker" \
--docker-image alpine:latest \
--description "docker-runner"
上述操作执行完成,命令行将提示 runner 注册成功,其配置信息保存在 /etc/gitlab-runner/config.toml 文件中,内容如下:
ini
[session_server]
session_timeout = 1800
concurrent = 1
check_interval = 0
shutdown_timeout = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "test"
url = "https://gitlab.com"
id = 28656708
token = "glrt-sWq83HYCs27qczxxCsuh"
token_obtained_at = 2023-10-20T03:07:16Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "docker"
[runners.cache]
MaxUploadedArchiveSize = 0
[runners.docker]
tls_verify = false
image = "alpine:latest"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
进行 GitLab 的 Hello-CICD 项目,展开 Settings > CI/CD > Runners,将刚才注册的 runner 已分配给该项目,如下图所示:
创建 .gitlab-ci.yml 文件
在 Hello-CICD 项目创建 .gitlab-ci.yml 文件,它是一个 YAML 文件,可以在其中指定 GitLab CI/CD 的指令。下面是一个真实的 .gitlab-ci.yml 文件:
yaml
# CICD 镜像
image: 'registry.xxxx.com/fe/node-yarn-zip-bash-git:10.19.0'
stages:
- npm-publish
before_script:
- npm install -s -g vitis-cli
- npm install -g cross-env
- npm install -g typed-css-modules
- npm install -s -g vitis-material-parser
- tcm --pattern ./packages/input/**/*.module.scss -c
publish-packages:
stage: npm-publish
script:
- cd ./packages/input
- tools-script publish-package ./ --ignore-uncommitted-changes yarn.lock
only:
- release
tags:
- kube-runner
创建 .gitlab-ci.yml 写入内容并提交该文件,进入 Hello-CICD 项目的 Build > Pipelines,界面将展示 Pipelines,如下图所示:
提示:获取完整的 .gitlab-ci.yml 语法,参见 docs.gitlab.com/ee/ci/yaml/...
到目前为止,最基本的 GitLab CI/CD 流程已介绍完毕,在实际项目中,最大的变量是 Docker 镜像,配置 CI/CD 流程应该提前准备好镜像。