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 小时前
# GitHub Actions 实战:从零搭建 CI/CD 流水线的 5 个核心配置
ci/cd
ofoxcoding2 天前
在AI API聚合平台配置DeepSeek V3.2提示词缓存实战:快速接入与成本优化指南
人工智能·spring·缓存·ai
NeilYuen2 天前
gRPC结合FAISS构建AI助手语义缓存模块(一):设计
人工智能·缓存·faiss
taocarts_bidfans2 天前
反向海淘跨境缓存架构优化:taocarts Redis分层缓存实战技术
redis·缓存·架构·反向海淘·taocarts
退休倒计时2 天前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript
炘爚2 天前
Linux——Redis
数据库·redis·缓存
小挪号底迪滴2 天前
Redis 和 MySQL 数据不一致怎么办?缓存更新策略实战
redis·mysql·缓存
霸道流氓气质2 天前
GitLab CI/CD 完全指南
linux·ci/cd·gitlab
sbjdhjd2 天前
从零搭建企业级 CI/CD(下):Jenkins+GitLab+Harbor 全链路实战指南
git·servlet·ci/cd·云原生·云计算·gitlab·jenkins