管道完成后是否可以使用
Gitlab CI
使管道缓存失效或清除?
我的
.gitlab-ci.yml
文件具有以下全局缓存定义
cache:
key: "%CI_PIPELINE_ID%"
paths:
- './msvc/Project1`/bin/Debug'
- './msvc/Project2`/bin/Debug'
- './msvc/Project3`/bin/Debug'
cache-key
值指定每个管道应维护自己的缓存,这工作正常,但缓存文件在管道完成后继续存在。随着数百个管道正在运行,大小开始增加,手动删除我们计算机上的缓存文件夹并不是一个很好的解决方案。
我尝试在管道末尾添加清理作业
cleanup:
stage: cleanup
script:
- rm -rf './msvc/Project1/bin'
- rm -rf './msvc/Project2/bin'
- rm -rf './msvc/Project3/bin'
when: always
这会删除本地文件,但不会从缓存中删除它们。
我在这里遗漏了什么吗?
目前正在运行
Gitlab-EE 10.3.3
这不是一个完美的解决方案,但我们最终在
.gitlab-ci.yaml
文件末尾创建了一个清理作业,从文件系统中删除缓存目录。
这样,每个管道都会获得自己独特的缓存,而不会随着时间的推移而使文件系统变得混乱。
cleanup_job:
stage: cleanup
script:
- echo "Cleaning up"
- rm -rf "%CACHE_PATH%/%CI_PIPELINE_ID%"
when: always
哪里
CACHE_PATH: "C:/gitlab-runner/cache/group/project/repo/"
引用Gitlab项目大师之一@ayufan:
缓存存储在
中或作为 docker 容器/home/gitlab-runner/cache
。docker ps | grep -cache-
因此您可以尝试删除该目录并清除所有返回的 docker 容器。
另一个答案中提到的“清除运行器缓存”按钮并不令人满意:
重要:对于要缓存的顶级目录,不能简单地删除它们,否则 gitlab-ci 将显示:
Creating cache main-Win-64-31-protected...
WARNING: some-top-level-directory: no matching files
Archive is up to date!
Created cache
Cleaning up project directory and file based variables
Job succeeded
和 some-top-level-directory
在缓存中保持不变!所以你需要做的就是将它们清空而不是删除它们。我还没有测试顶级文件会发生什么。
之后你会得到以下输出:
Creating cache cache main-Win-64-31-protected...
some-top-level-directory: found 1 matching files and directories
No URL provided, cache will be not uploaded to shared cache server. Cache will be stored only locally.
Created cache
Cleaning up project directory and file based variables
Job succeeded
在 gitlab-ci 中调试缓存时,通过浏览来查看缓存实际包含的内容会很有帮助。