代码之家  ›  专栏  ›  技术社区  ›  Dan

使用Gitlab CI清除管道缓存

  •  23
  • Dan  · 技术社区  · 7 年前

    管道完成后,是否可以使用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

    3 回复  |  直到 7 年前
        1
  •  21
  •   Merhawi Fissehaye    4 年前

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

    enter image description here

        2
  •  14
  •   Dan    7 年前

    这并不是一个完美的解决方案,但我们最终还是在工作结束时创建了一个清理工作 .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/"
    
        3
  •  1
  •   secustor    7 年前

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

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

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