docker - 如何将 Gitlab ci/cd 缓存挂载到 Docker 容器中?
问题描述
如何在 Docker 容器中提供 Gitlab ci/cd 缓存?
我有一个这样的构建脚本:
dependency-check:
image: maven:3-openjdk-11
stage: verify
cache:
- key: downloads
paths:
- ./downloads
script:
- ...
...
为了将缓存安装downloads
到容器中,将文件写入容器并在未来的管道中重新使用它,我需要添加什么?
解决方案
缓存项对应于 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
推荐阅读
- python-3.x - 通过 Google Drive File Stream 上传大量文件
- ruby-on-rails - 如何对角色的权限进行分组
- javascript - 为什么 state.map(foo => <>{foo}) 不显示任何内容?
- reactjs - 静态站点的环境变量?
- machine-learning - AttributeError : 'tuple' 没有属性 'to'
- flutter - Flutter:在构建期间调用 setState() 或 markNeedsBuild()
- google-cloud-platform - 如何在 travis 部署之前清除 Google Cloud Storage(GCS)存储桶
- bash - 减去bash中用逗号分隔的两个日期
- java - 为什么 SimpleAuthorityMapper 的 mapAuthorities 方法在 Spring Securit 中不起作用?
- dart - IntelliJ 中的 SDK 路径选择窗口中缺少文件夹