一、什么是CI/CD
- CI 持续集成
- CD 持续交付
CI/CD就是在开发阶段,通过自动化发布,来频繁部署应用的一种方式
二、为什么要配置CI/CD
想象一下,一个项目的发布如果手动部署,需要的操作有:
- 单元测试
- 打包文件
- 上传服务器
- 等等
如果每个过程都需要手动执行,每次都要保证不出错,这个已经很繁琐了。
而现在大的前端项目多达10+的人开发,而且人员流动大。
如果每个人都这么发布,快速迭代就容易出错。
这时候就需要CI/CD了,
CI/CD提供了自动化部署、代码质量检查、版本管理、快速回退等的能力
三、准备工作
- 前端项目:用来部署前端业务的代码
- Gitlab: 8.0.0版本以上支持CI/CD
- Gitlab runner:
- 理解为一个应用,可以通过Api和Gitlab交互,需要提前部署。
- .gitlab-ci.yml配置的一个个CI/CD任务,需要Runner执行,然后将结果反馈Gitlab实例。
- 这些任务可以配置,比如构建镜像,代码检测,部署发布...等等。
- Docker仓库:用来保存构建的镜像版本,方便随时回退
- K8S集群:用来部署项目,多集群部署可以容灾
四、具体的执行流程
1、图示流程
配置Gitlab的CI/CD发布,要了解这个发布过程
2、配置文件
项目中需要配置
- .gitlab-ci.yml
- Dockerfile
- gitlab runner
- production.yml
3、具体执行
(1)开发代码完毕
开发完毕后,提交代码到master,并推送远程仓库,执行下面语句,将触发CICD
git tag v1.0.0 && git push origin v1.0.0
注意,触发CI/CD有多种方式,包括:git tag
,合并分支,调用Api,或者Gitlab页面操作,需要配置.gitlab-ci.yml文件
(2)触发CICD
如图所示,Gitlab将会启动一个pipeline,这个pipeline包括了.gitlab-ci.yml
文件定义的一系列任务,包括自定义的并行和串行任务。
具体执行任务是在Gitlab Runner中,Runner要提前配置好。
如下图i6PHy8wy
就是一个共享的runner:
(3)构建并上传镜像到自建的docker仓库
CI/CD的过程中可以构建一个用来部署的docker镜像,然后根据[product].yml(k8s)的配置文件,部署k8s。
我们可以看到,整个过程中,我们仅仅执行命令git tag
,然后后面的一些任务,如静态检查,单元测试,打包,部署都不需要操心,直到完成,完成也可以配置邮件或微信提醒,有问题可以回退版本。这样就避免了人为的操作失误。
五、Gitlab Runner的安装和注册
1、Gitlab Runner 是什么
由上面的流程,我们可以看到在触发CI/CD后,必须要有一个可以执行pipeline的runner,所以就先来部署gitlab runner。
Runners are processes that pick up and execute CI/CD jobs for GitLab
意思就是runner
是一个可以跑CI/CD任务的一系列进程。
gitlab-runner是一个执行Gitlab CI/CD的应用,先注册
gitlab-runner
,然后配置的.gitlab-ci.yml的任务和指令就可以成功执行,然后再通过api将结果反馈Gitlab。
2、Gitlab Runner的分类
- 共享runner 可以让当前gitlab仓库的所有项目共用
- 组runner 可以让组中的项目共用,在组cicd中注册
- 项目runner 仅可以在当前项目使用,在当前项目下配置
3、安装
这三类runner的安装一样,支持安装在本地,虚拟机,云服务器,docker,k8s等。官方安装说明
这里我们选择安装到一台linux云服务器,文档
(1)根据不同的服务器版本,下载对应的gitlab-runner
# Linux x86-64
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64"
# Linux x86
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386"
# Linux arm
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm"
# Linux arm64
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm64"
# Linux s390x
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-s390x"
(2) 给gitlab-runner权限
sudo chmod +x /usr/local/bin/gitlab-runner
(3) 创建一个gitlab-ci的用户,之后在CICD都会在这个用户下进行
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
(4) 安装并且启动gitlab-runner
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
4、注册
(1)执行gitlab-runner命令
sudo gitlab-runner register
然后根据提示,依次输入下图中1、2的url和token,还有一个tag,是用来和.gitlab-ci.yml联动的,可以自行定义,像下图的test。
注册需要在setting/cicd页面,打开runner模块,拿到图中的urlh和token
- 项目的runner就到项目下的setting/cicd,
- 组的runner就到组的setting/cicd
- 共享的runner就去管理员权限下拿
这里安装了项目的runner,安装好后就可以看到如图中3所示的runner
到这里,就安装好了,然后接着配置.gitlab-ci.yml
文件,让CICD跑起来。