GitLab CI缓存清理策略踩坑记录
最近在优化GitLab CI流水线性能时,遇到了一个棘手的缓存清理问题。我们的项目使用了cache配置来加速构建,但发现缓存文件越来越多,占用磁盘空间巨大。
问题复现
build:
stage: build
script:
- npm install
- npm run build
cache:
key: $CI_COMMIT_REF_NAME
paths:
- node_modules/
这个配置看似合理,但实际执行后发现每个分支都会生成独立的缓存key,导致缓存文件堆积。更糟糕的是,旧的缓存没有被清理,磁盘空间占用从20G飙升到80G。
解决方案
1. 使用缓存清理脚本:
# .gitlab-ci.yml
before_script:
- |
if [ "$CI_PIPELINE_ID" -gt 100 ]; then
echo "Cleaning old cache..."
find /builds -name "cache-*" -type d -mtime +7 -exec rm -rf {} +
fi
2. 设置缓存过期策略:
build:
stage: build
script:
- npm install
- npm run build
cache:
key: ${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}
paths:
- node_modules/
policy: push
3. 监控缓存使用情况:
# 查看缓存目录大小
find /builds -name "cache-*" -type d -exec du -sh {} \; | sort -hr
实际效果
清理后磁盘占用从80G降低到25G,构建时间平均减少15%。建议结合CI/CD监控指标,定期执行缓存清理任务。
关键指标:
- 缓存命中率:从65%提升至85%
- 构建时间:平均缩短15%
- 磁盘使用:从80G降至25G

讨论