分享我在前后端分离项目中Gitlab-CI的经验

简介: 今天继续聊一聊为前后端分离搭建Gitlab-CI的额外经验。

Before


Gitlab-ci是Gitlab提供的CI/CD特性,结合Gitlab简单友好的配置界面,能愉悦的在Gitlab界面查看管道执行流程,并自然流畅的推动敏捷开发。


Gitlab-CI/CD的核心是搭建Gitlab Runner、编写.gitlab-ci.yaml文件。


详细示例请参考:Gitlab CI/CD+ASP.NET Core.


本次前后端两个项目使用同一个Gitlab Runner(shell模式),前端项目的gitlab-ci.yaml构建Job如图:


4efeb0ce87bb257412155004200c47cd.png


Round 1


单个Gitlab Runner可为多个项目提供构建服务


gitlab-Runner register命令只能接受一个注册token,当时为支持多个项目,花了不少冤枉心思倒腾Gitlab Runner.


你可以为注册的项目解锁Runner,这样Gitlab Runner就可以为其他项目提供构建:


86b72f9c5256168d382d3be4f4dce58a.png


Round 2


使用Runner缓存加快前端构建过程


大家都知道npm_module被前端开发者诟病为毒瘤, 而Gitlab runner执行每次构建job之前都会清场,pull/fetch指定的代码再执行job, 这就导致每次build job会耗时很久(要拉取毒瘤)。


#!/bin/bash
cd   packages/event-analysis
yarn config set registry http://registry.npm.xxoo.com &&  yarn --prefer-offline --frozen-lockfile
npm run build


以上是build任务的脚本frontend.sh,总耗时3m33s,其中yarn命令拉取

npm_modules耗时172.52s


de8d8ec49609c194fe4a2c94c96032c2.png


gitlab runner支持缓存


在.gitlab-ci.yaml 文件中定义cache指令:cache被用来在job之间缓存文件,更强大的是可以定义文件依赖缓存:


build:
  stage: build
  cache:
    key:
      files:
        - packages/event-analysis/package.json
    paths:
      - node_modules
  script:
    - ./frontend.sh
  tags:
    - my-tag


缓存key是yarn命令要用到的package.json,缓存内容是npm_modules;


只要这个package.json文件未变更,后续任务就会使用缓存的npm_modules,而不用重建npm_modules依赖。


使用runner缓存优化后build任务总耗时1m18s,其中yarn命令耗时22.83s, 相比之前耗时大大减少 ,妙哉。


c8ffad0f036c84de1cc5ecbc82bfa6b0.png


相关文章
|
3月前
IDEA第一次上传项目到gitlab
IDEA第一次上传项目到gitlab步骤
|
1天前
|
jenkins 持续交付 开发工具
【gitlab】旧的gitlab项目迁移新的gitlab
【gitlab】旧的gitlab项目迁移新的gitlab
11 0
|
9月前
gitlab--trigger 触发不同项目之间的 CI、 触发同一项目下的其他 ci
gitlab--trigger 触发不同项目之间的 CI、 触发同一项目下的其他 ci
|
4月前
|
程序员 开发工具 git
【实测】gitlab/github 如何过滤项目内的文件
【实测】gitlab/github 如何过滤项目内的文件
|
5月前
|
开发工具 git
hbuilderX安装git插件→拉取线上gitlab项目
hbuilderX安装git插件→拉取线上gitlab项目
|
10月前
gitlab删除项目
gitlab删除项目
318 0
|
5月前
|
缓存 JavaScript 前端开发
GitLab 官网使用 pages 服务,发布 vue 前端项目
GitLab 官网使用 pages 服务,发布 vue 前端项目
|
6月前
|
jenkins 网络安全 持续交付
微服务轮子项目(44) -GitLab代码仓库
微服务轮子项目(44) -GitLab代码仓库
61 0
|
6月前
|
Linux 开发工具 git
淘东电商项目(07) -GitLab简介以及Docker部署
淘东电商项目(07) -GitLab简介以及Docker部署
74 0
|
7月前
|
前端开发 Java jenkins
Jenkins+Gitlab+Nginx+SonarQube+Maven编译Java项目自动发布与基于tag版本回退
Jenkins+Gitlab+Nginx+SonarQube+Maven编译Java项目自动发布与基于tag版本回退
255 0