跳到主要内容

gitLab CI/CD

参考官方文档:https://docs.gitlab.com/ee/install/docker.html

gitLab持续集成,只要在仓库的根目录添加.gitlab-ci.yml文件,并且配置了gitLab runner(运行器),每次代码发生变成的时候就会执行.gitlab-ci.yml中的配置

GitLab CI/CD 是一个内置在GitLab中的工具,用于通过持续方法进行软件开发:

  • Continuous Integration (CI) 持续集成
    • 让产品可以快速迭代,同时还能保证高质量,
  • Continuous Delivery (CD) 持续交付
    • 持续交付可以看做持续集成的下一步,它强调的是不论怎么更新,软件都是随时随地可以交付的
  • Continuous Deployment (CD) 持续部署
    • 持续部署是持续交付的下一步,持续部署的目标是,软件在任何时刻都是可以部署的,可以进入生产阶段

gitlab仓库一旦收到任何推送,GitLab将立即查找.gitlab-ci.yml配置文件,执行里面的编写的脚本内容,并可以完整的走一边install、eslint检查、编译、部署服务器的流程

.gitlab-ci概念​

Pipeline​

一次 Pipeline 其实相当于一次构建任务,里面可以包含多个流程,如安装依赖、运行测试、编译、部署测试服务器、部署生产服务器等流程。 任何提交或者 Merge Request 的合并都可以触发 Pipeline

Stages​

Stages 表示构建阶段,说白了就是上面提到的流程。 我们可以在一次 Pipeline 中定义多个 Stages,这些 Stages 会有以下特点:

  • 所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始
  • 只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功
  • 如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败

jobs​

Jobs 表示构建工作,表示某个 Stage 里面执行的工作。 我们可以在 Stages 里面定义多个 Jobs,这些 Jobs 会有以下特点:

  • 相同 Stage 中的 Jobs 会并行执行
  • 相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功
  • 如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline) 失败

配置GitLab Runner跑CI​

GitLab Runner简单来说就是运行Job的容器或管理者

GitLab Runne的作用是每次代码发生变更的时候gitlab CI会根据.gitlab-ci.yml,配置文件执行流水线(Pipeline)中每个阶段Stages中的Jobs,并将结果发送回gitLab

安装gitlab-runner​

gitLab Runner是基于gitLab CI的API进行构建的相互隔离的机器,所以gitLab Runner 与gitlab本身不需要安装在同一台机器上,并且考虑到执行Runner对资源的消耗,以及安全性问题,所以并不建议安装在同一台机器上

  • 首先下载gitlab-runner的Docker镜像,可选用alpine-bleeding比较轻巧
bash
docker pull gitlab/gitlab-runner:alpine-bleeding
  • 运行docker-runner
    • 会发现如下错误,config.toml文件找不到,这个问题不必担心,当我们将gitlab-runner注册到Gitlab时,会自动生成该文件
bash
docker run gitlab/gitlab-runner:alpine-bleeding

注册gitlab-runner​

  • 安装好gitlab-runner需要注册到Gitlab,打开Project->Settings->CI/CD功能

  • 注册一个runner,获取到runner注册需要使用的地址和token,并且URL指定为xxx,token指定为xxx

  • 进入gitlab-runner容器的内部;

    bash
    docker exec -it gitlab-runner /bin/bash

gitlab-ci.yml 配置说明​

关键字描述
script必须参数,运行器需要执行的脚本
image使用Docker image镜像
services使用Docker services镜像
before_script作业执行前需要执行的命令
after_script作业执行后需要执行的命令
stages定义流水线所有的阶段
stage定义作业所处流水线的阶段(默认test阶段)
onlyonly 限制执行分支
except限制作业在什么时候不创建
tags指定runner运行器环境
allow_failure允许作业失败,失败的作业不影响提交的状态
when什么时候运行作业
environment作用部署的环境名称
cache指定需要在job之间缓存的文件或目录
artifacts归档文件列表,指定成功后应附加到job的文件和目录的列表
dependencies当前作业依赖的其他作业,你可以使用依赖作业的归档文件
coverage作业的代码覆盖率
retry作业失败时,可以自动执行多少次
parallel指定并行运行的作业实例
trigger定义下游流水线的触发器
include作业加载其他YAML文件
extends控制实体从哪里继承
pages上传GitLab Pages的结果
retry作业失败时,可以自动执行多少次
variables定义环境变量

gitLab CI/CD例子​

yaml
stages:
- build

build:
stage: build
script:
- npm install
- npm run build
artifacts:
name:"ci_job_name",
paths:
- dist/
only:
- master

在构建作业中,我们首先执行 npm install 命令来安装依赖关系,然后执行 npm run build 命令来构建项目。在构建过程中,我们将会生成一些静态文件,并将这些文件保存到项目的 dist/ 目录中

你是如何配置gitlab cicd?​

  • 1、在gitlab创建项目仓库

  • 2、在项目上 创建.gitlab-ci.yml 【ci配置文件】

  • 3、在配置文件中,针对性的配置 (定义构建阶段和任务、指定 Runner 和镜像、指定特定分支来指定构建脚本)

    • image: 指定所使用的 Docker 镜像

    • stages:定义构建阶段

    • tags:指定runner运行器环境

      • runner 表示是运行Job(构建工作)的容器或管理者
    • script: 定义了当前阶段的执行脚本列表

    • only: 通过only来指定特定的分支来执行当前阶段的脚本

gitlab cicd例子​

yacas
# 指定所使用的 Docker 镜像
image: harbor-gz.dtyunxi.cn/library/yunxicibase:0.1.9
// 定义多个构建阶段
stages:
- build-dev
- build-test
- build-stage
- build-prod
build-prod:
tags:
- saas
stage: build-prod
script:
- npm run clean
- npm install
- chmod -R 777 node_modules
- ls -ltr /opt/
- cp /opt/ossSaas.js ./
- npm run build
- cp /opt/ossUpload.js ./
- node ./ossUpload.js jjyprod
- node ./ossUpload.js hushang
- node ./ossUpload.js yangguofuprod
- node ./ossUpload.js mxbcprod
- cp /opt/cosUpload.js ./
only:
- /^prod$/

如何配置runner​

  • 给runner增加tag
    • 在gitlab仓库中,如Settings => CI/CD => Runners
      • Tags可自定义

具体步骤:

  1. 登录到你的 GitLab 账户。
  2. 导航到你的项目。
  3. 在左侧导航栏中,点击 "Settings"(设置)。
  4. 在设置页面中,选择 "CI/CD"。
  5. 在 "Runners" 部分,你可以选择使用共享的 GitLab Runner,或者设置自己的特定 Runner。

cicd 如何优化​

使用缓存​

  • 在 .gitlab-ci.yml 中配置缓存,以减少重复下载依赖和构建的时间
  • 使用 cache 关键字来定义需要缓存的目录或文件
yaml
cache:
paths:
- node_modules/

使用pnpm安装依赖​

参考pnpm文档持续集成配置

  • 替代npm/yarn