GitLab CI缓存配置

先说说缓存到底是个啥玩意儿。在GitLab CI里,缓存其实就是把流水线中某些目录或文件临时存起来,让后续的job可以直接复用,不用每次都从头下载或编译。比如你有个Java项目,把目录缓存下来,下次构建就能跳过依赖下载;或者前端项目缓存,npm install的时间直接砍半。不过要注意,缓存和制品(artifacts)可不是一码事------制品是job生成的输出文件,会长期存储,而缓存只是临时加速用,可能被后续任务覆盖。

配置缓存主要靠修改文件,用关键字来定义。最简单的写法是指定列表,比如缓存node_modules目录:

这样每个job都会尝试复用这个目录。但问题来了:如果不同分支的依赖版本不一样,混用缓存可能出乱子。所以最好加上字段,用变量来区分缓存版本。比如按分支设置:

这时候是GitLab预定义的环境变量,代表分支名。假如你在feature分支和main分支之间切换,缓存就会自动隔离。

实际项目中,缓存的策略得根据技术栈调整。像Maven项目通常缓存,Gradle项目缓存。不过有些目录体积太大,比如Python的virtualenv,全缓存可能超限,这时候可以只缓存包索引。另外,如果job之间需要共享缓存,得注意的匹配规则。曾经碰到一个坑:测试job和构建job用了不同的key,结果缓存根本没共享,白折腾半天。

进阶用法是结合。默认是模式,即job开始时拉取缓存,结束时推送更新。但如果某个job只是用缓存而不修改,比如代码扫描任务,可以设为策略来提升速度:

反之,如果某个job专门更新缓存(比如安装依赖),可以用策略,不过这种场景比较少。

缓存失效也是个头疼问题。比如依赖更新后,旧缓存可能导致构建失败。这时候可以通过改变来强制刷新,比如把项目版本号加进key:

或者在安装依赖的job里用控制条件,比如只在依赖文件变更时才更新缓存。

最后提醒几个注意点:一是缓存大小有限制(默认每个项目20GB),别把编译输出之类的大文件塞进去;二是多阶段流水线中,缓存可能在并行job间竞争写入,建议用指定依赖文件哈希值来自动更新key。例如用的哈希作为key:

这样只要锁文件没变,就一直用旧缓存。

总之,缓存配置看似简单,但细节决定成败。花半小时调优一下,可能每天能省下几十分钟的构建时间。尤其是微服务项目,十几个仓库都优化一遍,累积的效益相当可观。如果你们团队还在手动清理缓存目录,赶紧把这篇配置方法扔群里试试吧!

相关推荐
清风拂山岗 明月照大江7 小时前
Redis笔记汇总
java·redis·缓存
消失的旧时光-19438 小时前
第十四课:Redis 在后端到底扮演什么角色?——缓存模型全景图
java·redis·缓存
消失的旧时光-19439 小时前
第十四课 · 实战篇:Redis 缓存系统落地指南(Spring Boot 从 0 到可用)
spring boot·redis·缓存
池央10 小时前
CANN Catlass 算子模板库深度解析:GEMM 核心优化、模板元编程与片上缓存策略的协同
缓存
这周也會开心11 小时前
Redis数据类型的底层实现和数据持久化
数据库·redis·缓存
My LQS12 小时前
使用 Redis Stack 向量索引构建大模型问答缓存系统
redis·缓存·ai
切糕师学AI12 小时前
GitLab 是什么?
gitlab
池央1 天前
CANN oam-tools 诊断体系深度解析:自动化信息采集、AI Core 异常解析与 CI/CD 流水线集成策略
人工智能·ci/cd·自动化
IT陈图图1 天前
CANN生态数据引擎:minddata的缓存策略与性能调优
缓存·cann
池央1 天前
CANN GE 深度解析:图编译器的核心优化策略、执行流调度与模型下沉技术原理
人工智能·ci/cd·自动化