问题描述
Docker 引入了 RUN --mount=type=cache
,我可以在本地很好地工作,但我希望能够在 CI 中利用它,特别是 Azure Devops。
但我找不到 save
和 load
构建之间缓存的方法。有没有办法做到这一点?
解决方法
请参考this doc:
在 Microsoft 托管代理的当前设计中,每个作业都被分派到新配置的虚拟机(基于从 azure-pipelines-image-generation 存储库模板生成的映像)。这些虚拟机在作业完成后会被清除,不会被保留,因此无法为后续作业重用。虚拟机的短暂特性阻止了缓存的 Docker 层的重用。
因此,当您使用 Microsoft 托管代理时,VM 上的本地 docker 缓存不能被其他构建使用。
这里有一些替代方法:
-
您可以使用 self-hosted agent 来执行 docker 构建过程。多个构建可以共享本地缓存。
-
您也可以使用 Cache task 和
docker save/load commonds
将保存的 docker 层上传到 azure devops 服务器并在以后运行时恢复。 -
使用 docker pull 从远程仓库拉取镜像。使用 --cache-from 指向图像。您可以将构建映像推送到远程存储库以供下次构建。
您可以参考 this blog 和 this ticket 了解更多详细信息。