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:

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

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

相关推荐
西部森林牧歌2 小时前
Arbess安装配置:3分钟完成国产CI/CD工具私有化部署
ci/cd·arbess·tiklab devops
p***c9492 小时前
GitLab CI/CD变量
git·ci/cd·gitlab
O***p6042 小时前
GitLab CI/CD自动化部署实践
ci/cd·自动化·gitlab
西部森林牧歌11 小时前
CI/CD工具选型指南:Jenkins与Arbess深度对比
ci/cd·jenkins·arbess·tiklab devops
l***370913 小时前
redis info 详解
数据库·redis·缓存
上海云盾-高防顾问14 小时前
CDN缓存命中率太低?动态智能预加载技术深度解析
缓存
Wilson Chen14 小时前
Spring Boot 多级缓存实现与优化:从本地缓存到 Redis
spring boot·redis·缓存
知兀17 小时前
私有化部署的gitlab的push failed问题,使用http远程连接(使用token或用户、密码)
gitlab
SongYuLong的博客17 小时前
Ubuntu24.04搭建GitLab服务器
运维·服务器·gitlab