使用Gitlab CI清除管道缓存

使用Gitlab CI清除管道缓存,gitlab,gitlab-ci,gitlab-ci-runner,Gitlab,Gitlab Ci,Gitlab Ci Runner,管道完成后,是否可以使用Gitlab CI使管道缓存失效或清除 My.gitlab ci.yml文件具有以下全局缓存定义 cache: key: "%CI_PIPELINE_ID%" paths: - './msvc/Project1`/bin/Debug' - './msvc/Project2`/bin/Debug' - './msvc/Project3`/bin/Debug' cache key值指定每个管道都应该维护自己的缓存,该缓存工作正常,但缓存文件在

管道完成后,是否可以使用Gitlab CI使管道缓存失效或清除

My
.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项目负责人之一@ayufan:

缓存存储在
/home/gitlab runner/cache
或作为docker容器
docker ps | grep-cache-


因此,您可以尝试删除目录并清除所有返回的docker容器

这不是一个完美的解决方案,但我们最终在
.gitlab ci.yaml
文件的末尾创建了一个清理作业,该文件从文件系统中删除缓存目录

这样,每个管道都会获得自己独特的缓存,而不会随着时间的推移使文件系统变得混乱

cleanup_job:
  stage: cleanup
  script:
    - echo "Cleaning up"
    - rm -rf "%CACHE_PATH%/%CI_PIPELINE_ID%"
  when: always
在哪里


工件是注释中提到的解决方案。但是,在Pipelines页面中有一个清除缓存的选项,如下图所示


我知道缓存存储在哪里。我的目标是避免手动从构建服务器中定期删除它们。如果手动任务让您感到困扰,您可以使用Cronjobs或。但在同一运行时内直接删除缓存目前是不可能的。手动删除缓存的问题是,我不知道从终端应该清除或保留哪个管道缓存。在我看来,缓存应该检测运行脚本是否删除了文件,并更新缓存在您的情况下,我宁愿使用工件而不是缓存。工件可以在管道内从一个作业传递到另一个作业,并且它们不会在管道之间持久化。你可以一起停用缓存是的,你完全正确。这也是我们最后得出的结论。还有
after\u脚本directive@raarts是的,但这是每项工作之后的事。如果在每次作业后清理缓存,则没有理由缓存。不确定是否已删除缓存。然而,在目前的非商业gitlab中,这个按钮并不存在。尽管我使用的是免费版本,但我仍然可以在我的项目中找到它。我甚至可以在我创建的新项目中找到它。这很烦人,因为开发人员可以推动
.gitlab ci.yml
做同样的事情。
CACHE_PATH: "C:/gitlab-runner/cache/group/project/repo/"