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:

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

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

相关推荐
ShiXZ2139 小时前
Redis 常用指令全集:redis-cli 实战速查手册
数据库·redis·缓存
難釋懷21 小时前
Nginx内存缓存
nginx·缓存·junit
huameinan狮子21 小时前
微服务化的基石——持续集成
大数据·ci/cd·微服务
一次旅行21 小时前
act本地预跑GitHub Actions:Python项目完整CI/CD流水线实战
python·ci/cd·github
飞翔的馒1 天前
浏览器缓存之【结构化数据库与缓存】: IndexedDB、Cache storage 和 Storage buckets
数据库·缓存
csdn2015_1 天前
vscode从gitlab拉项目到本地
vscode·gitlab
怪兽学LLM1 天前
AI 应用中的高并发处理:从限流、异步到缓存与队列
人工智能·缓存
喜欢的名字被抢了1 天前
长会话状态治理:当Redis失忆后,系统如何自己找回忆
数据库·redis·缓存
Alan_6912 天前
商品详情优化三板斧-拆分-多级缓存-GC调参
后端·缓存
heimeiyingwang2 天前
【架构实战】Helm Chart 进阶:依赖管理、测试与 CI/CD 集成
ci/cd·架构