首页 > 解决方案 > 如何将 Gitlab ci/cd 缓存挂载到 Docker 容器中?

问题描述

如何在 Docker 容器中提供 Gitlab ci/cd 缓存?

我有一个这样的构建脚本:

dependency-check:
  image: maven:3-openjdk-11
  stage: verify
  cache:
    - key: downloads
      paths:
        - ./downloads
  script:
    - ...
  ...

为了将缓存安装downloads到容器中,将文件写入容器并在未来的管道中重新使用它,我需要添加什么?

标签: dockergitlab-ci

解决方案


缓存项对应于 GitLab 将缓存的文件系统上的常规文件或目录。

如果您需要缓存从正在运行的容器生成的文件/目录,请使用

dependency_check:
    ...
    script:
        - docker run  -v $(pwd)/downloads:/some/dir your_image

使用绑定挂载,该目录将在第一个管道之后被缓存,并且已经存在于下一个管道中。这在容器中运行某些东西时很有用,以避免您的应用程序重新生成它应该保留的目录。

如果您只需要从容器中获取文件/目录,则可以从容器中复制

dependency_check:
    ...
    script:
        - docker create --name your_container your_image
        - rm -rf ./downloads
        - docker cp your_container:/some/dir/ ./downloads

此处容器已创建但未启动。如果您在此步骤中构建映像,这很有用,通过将其发送到构建上下文来避免重新生成可以重用的目录。

如果这也有帮助,这是我写的一篇博客文章: Using cache in GitLab CI with Docker-in-Docker


推荐阅读