微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 CI 提取/重用 Docker BuildKit 缓存

如何解决如何使用 CI 提取/重用 Docker BuildKit 缓存

Docker 引入了 RUN --mount=type=cache,我可以在本地很好地工作,但我希望能够在 CI 中利用它,特别是 Azure Devops。

但我找不到 saveload 构建之间缓存的方法。有没有办法做到这一点?

解决方法

请参考this doc

在 Microsoft 托管代理的当前设计中,每个作业都被分派到新配置的虚拟机(基于从 azure-pipelines-image-generation 存储库模板生成的映像)。这些虚拟机在作业完成后会被清除,不会被保留,因此无法为后续作业重用。虚拟机的短暂特性阻止了缓存的 Docker 层的重用。

因此,当您使用 Microsoft 托管代理时,VM 上的本地 docker 缓存不能被其他构建使用。

这里有一些替代方法:

  1. 您可以使用 self-hosted agent 来执行 docker 构建过程。多个构建可以共享本地缓存。

  2. 您也可以使用 Cache taskdocker save/load commonds 将保存的 docker 层上传到 azure devops 服务器并在以后运行时恢复。

  3. 使用 docker pull 从远程仓库拉取镜像。使用 --cache-from 指向图像。您可以将构建映像推送到远程存储库以供下次构建。

您可以参考 this blogthis ticket 了解更多详细信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?