使用Docker镜像时,GitLab CI缓存的简易清理方法
GitLab CI 缓存清理解决方案
一、清理缓存中的单个文件(如pom.xml)
要在流水线结束后移除缓存里的特定文件,可新增一个专门的清理阶段,通过强制推送更新后的缓存来实现:
- 在
stages中添加cleanup阶段 - 编写清理任务,删除目标文件后用
cache:policy: push覆盖原有缓存
示例配置:
default: image: maven:3.9.0-eclipse-temurin-17 tags: - k8s-aws stages: - build - deploy - cleanup cache: paths: - .m2/repository/ - target/ - pom.xml build-branch: stage: build script: - some script which alter the pom.xml deploy: stage: deploy script: - mvn deploy cleanup-pom-cache: stage: cleanup script: - rm -f pom.xml cache: policy: push paths: - .m2/repository/ - target/ - pom.xml
此方案中,清理任务执行后会主动推送修改后的缓存,后续流水线拉取的缓存将不再包含被删除的pom.xml。
二、清空全部缓存的方法
1. 动态缓存键实现“每次流水线用新缓存”
通过将缓存键设置为流水线唯一ID,让每个流水线使用独立缓存,旧缓存会被GitLab自动回收:
cache: key: "$CI_PIPELINE_ID" paths: - .m2/repository/ - target/ - pom.xml
2. 流水线结束时强制清空缓存
新增清理阶段,删除所有缓存路径下的文件并推送空缓存:
cleanup-full-cache: stage: cleanup script: - rm -rf .m2/repository/ target/ pom.xml cache: policy: push paths: - .m2/repository/ - target/ - pom.xml
3. 手动清理项目所有缓存
在GitLab项目的设置 → CI/CD → 缓存页面,点击“清理缓存”按钮,可一键清空项目所有缓存。
三、关于Docker镜像与缓存持久化的说明
GitLab CI的缓存存储在独立的后端(GitLab服务器或外部存储如S3),与作业使用的Docker容器分离。容器销毁后,缓存会持续保留,直到被GitLab的缓存回收策略处理或主动清理,这就是你看到缓存持久化的原因。
内容的提问来源于stack exchange,提问作者рüффп
相关产品推荐
相关产品推荐

