分享我在前后端分离项目中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


相关文章
|
9月前
IDEA第一次上传项目到gitlab
IDEA第一次上传项目到gitlab步骤
|
8月前
|
JavaScript Java 应用服务中间件
用白薅来的gitlab自带的gitlab-runner部署一个vue项目
用白薅来的gitlab自带的gitlab-runner部署一个vue项目
222 2
|
4月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
130 0
|
9月前
|
jenkins 持续交付 开发工具
【gitlab】旧的gitlab项目迁移新的gitlab
【gitlab】旧的gitlab项目迁移新的gitlab
1510 0
|
4月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
333 0
|
5月前
|
Docker 容器
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
|
8月前
|
缓存 Kubernetes Linux
CentOS 7上的GitLab Runner,让你的项目加速奔跑
CentOS 7上的GitLab Runner,让你的项目加速奔跑
469 1
|
9月前
|
开发工具 git
修改GitLab项目文件路径重新刷新配置报错问题原因及解决方案
修改GitLab项目文件路径重新刷新配置报错问题原因及解决方案
447 0
gitlab--trigger 触发不同项目之间的 CI、 触发同一项目下的其他 ci
gitlab--trigger 触发不同项目之间的 CI、 触发同一项目下的其他 ci
|
9月前
|
Shell 网络安全 开发工具
GitLab创建项目的时候需要SSH Keys
GitLab创建项目的时候需要SSH Keys
55 0