Gitlab CI/CD执行流程和Gitlab Runner安装和注册

3,712 阅读4分钟

一、什么是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

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

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

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

image.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 到这里,就安装好了,然后接着配置.gitlab-ci.yml文件,让CICD跑起来。