使用Gitlab CI清除管道缓存

Dan*_*Dan 7 gitlab gitlab-ci gitlab-ci-runner

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

我的.gitlab-ci.yml文件具有以下全局缓存定义

cache:
  key: "%CI_PIPELINE_ID%"
  paths:
    - './msvc/Project1`/bin/Debug'
    - './msvc/Project2`/bin/Debug'
    - './msvc/Project3`/bin/Debug'
Run Code Online (Sandbox Code Playgroud)

cache-key值指定每个管道应维护自己的缓存,这可以正常工作,但是在管道完成后,缓存文件仍然存在。随着数百个管道的运行,大小开始增加,手动删除我们计算机上的缓存文件夹并不是一个很好的解决方案。

我尝试在管道的末尾添加清理作业

cleanup:
  stage: cleanup
  script:
  - rm -rf './msvc/Project1/bin'
  - rm -rf './msvc/Project2/bin'
  - rm -rf './msvc/Project3/bin'
  when: always
Run Code Online (Sandbox Code Playgroud)

会删除本地文件,但不会从缓存中删除它们。

我在这里想念什么吗?

当前正在运行的Gitlab-EE 10.3.3

Mer*_*aye 8

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

在此处输入图片说明

  • 请注意,清除运行器缓存实际上并不删除缓存数据。您必须[手动删除](https://docs.gitlab.com/ee/ci/caching/#clear-the-cache-manually) (4认同)
  • 不确定这是否被删除。然而,在当前的非商业版 gitlab 中,该按钮并不存在。 (2认同)
  • Fissehay 您需要成为维护人员才能清除缓存。这很烦人,因为开发人员可以推送到“.gitlab-ci.yml”做同样的事情。 (2认同)

Dan*_*Dan 6

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

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

cleanup_job:
  stage: cleanup
  script:
    - echo "Cleaning up"
    - rm -rf "%CACHE_PATH%/%CI_PIPELINE_ID%"
  when: always
Run Code Online (Sandbox Code Playgroud)

哪里

CACHE_PATH: "C:/gitlab-runner/cache/group/project/repo/"
Run Code Online (Sandbox Code Playgroud)

  • 还有“after_script”指令 (2认同)
  • @raarts 是的,但是在每个工作之后运行。如果您在每次作业后清理缓存,就没有理由缓存 (2认同)