# Gitlab CI/CD执行流程

> 作者/来源: UCloud 运营管理员
> 发布时间: 2022-10-08T06:51:00.000Z
> 分类: 云主机
> 标签: Linux, 前端, Docker
> 原文链接: http://117.50.162.249:3000/yun/articles/2392

---

# Gitlab CI/CD执行流程

> 来源: https://www.ucloud.cn/yun/127953.html
> 作者: 社区管理员
> 发布日期: 发布于2022-10-08 14:51

## 一、什么是CI/CD

- CI 持续集成
- CD 持续交付

CI/CD就是在开发阶段，通过自动化发布，来频繁部署应用的一种方式

## 二、为什么要配置CI/CD

想象一下，一个项目的发布如果手动部署，需要的操作有：

- 单元测试
- 打包文件
- 上传服务器
- 等等

如果每个过程都需要手动执行，每次都要保证不出错，这个已经很繁琐了。

而现在大的前端项目多达10+的人开发，而且人员流动大。

如果每个人都这么发布，快速迭代就容易出错。

这时候就需要CI/CD了，

CI/CD提供了自动化部署、代码质量检查、版本管理、快速回退等的能力

## 三、准备工作

1. **前端项目**：用来部署前端业务的代码
2. **Gitlab**: 8.0.0版本以上支持CI/CD
3. **Gitlab runner**:

- 理解为一个应用，可以通过Api和Gitlab交互，需要提前部署。
- .gitlab-ci.yml配置的一个个CI/CD任务，需要Runner执行，然后将结果反馈Gitlab实例。
- 这些任务可以配置，比如构建镜像，代码检测，部署发布...等等。

4. **Docker仓库**：用来保存构建的镜像版本，方便随时回退
5. **K8S集群**：用来部署项目，多集群部署可以容灾

## 四、具体的执行流程

### 1、图示流程

配置Gitlab的CI/CD发布，要了解这个发布过程

![image.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127953/images/127953_000.png)

### 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

![image.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127953/images/127953_001.png)

如图所示，Gitlab将会启动一个pipeline，这个pipeline包括了`.gitlab-ci.yml`文件定义的一系列任务，包括自定义的并行和串行任务。

具体执行任务是在Gitlab Runner中，Runner要提前配置好。 如下图`i6PHy8wy`就是一个共享的runner：

![image.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127953/images/127953_002.png)

#### （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

![image.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127953/images/127953_003.png)

 到这里，就安装好了，然后接着配置`.gitlab-ci.yml`文件，让CICD跑起来。