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比较轻巧
docker pull gitlab/gitlab-runner:alpine-bleeding
- 运行docker-runner
- 会发现如下错误,
config.toml文件找不到,这个问题不必担心,当我们将gitlab-runner注册到Gitlab时,会自动生成该文件
- 会发现如下错误,
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容器的内部;docker exec -it gitlab-runner /bin/bash
gitlab-ci.yml 配置说明
| 关键字 | 描述 |
|---|---|
| script | 必须参数,运行器需要执行的脚本 |
| image | 使用Docker image镜像 |
| services | 使用Docker services镜像 |
| before_script | 作业执行前需要执行的命令 |
| after_script | 作业执行后需要执行的命令 |
| stages | 定义流水线所有的阶段 |
| stage | 定义作业所处流水线的阶段(默认test阶段) |
| only | only 限制执行分支 |
| 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例子
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例子
# 指定所使用的 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可自定义
- 在gitlab仓库中,如Settings => CI/CD => Runners
具体步骤:
- 登录到你的 GitLab 账户。
- 导航到你的项目。
- 在左侧导航栏中,点击 "Settings"(设置)。
- 在设置页面中,选择 "CI/CD"。
- 在 "Runners" 部分,你可以选择使用共享的 GitLab Runner,或者设置自己的特定 Runner。
cicd 如何优化
使用缓存
- 在
.gitlab-ci.yml中配置缓存,以减少重复下载依赖和构建的时间 - 使用
cache关键字来定义需要缓存的目录或文件
cache:
paths:
- node_modules/
使用pnpm安装依赖
- 替代npm/yarn