使用 Gitlab CI 清除管道缓存

问题描述 投票:0回答:4

管道完成后是否可以使用

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

caching gitlab gitlab-ci gitlab-ci-runner
4个回答
37
投票

Artifacts 是评论中提到的解决方案。但是,“管道”页面中有一个清除缓存的选项,如下图所示。


21
投票

这不是一个完美的解决方案,但我们最终在

.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/"

2
投票

引用Gitlab项目大师之一@ayufan:

缓存存储在

/home/gitlab-runner/cache
中或作为 docker 容器
docker ps | grep -cache-

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


0
投票

另一个答案中提到的“清除运行器缓存”按钮并不令人满意:

    它会清除所有 slug 的缓存(所有分支、所有操作系统等),这可能比您想要的更多
  • 它实际上并没有删除数据(如答案评论中提到的)
我们最终要做的是创建一个名为“clear_cache”的手动触发阶段,它将使用适当的 slug 并通过在生成缓存之前删除通常缓存的文件和目录来清空缓存。

重要:对于要缓存的顶级目录,不能简单地删除它们,否则 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 中调试缓存时,通过浏览来查看缓存实际包含的内容会很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.