我可以构建一个 Docker 图像到 "cache" 一个 yocto/bitbake 构建吗?

Can I build a Docker image to "cache" a yocto/bitbake build?

我正在为一个项目构建 Yocto 映像,但这是一个漫长的过程。在我强大的开发机器上,它需要大约 3 个小时,并且可以消耗多达 100 GB 的 space.

问题在于最终图像并不是 "necessarily" 最终目标; 运行 是我的应用程序最重要的部分。因此,yocto 配方变化不大,但我的应用程序变化很大。

我想 运行 持续集成 (CI) 我的应用程序甚至持续交付 (CD)。但由于 yocto 构建的大小,两者目前都非常困难。

由于构建没有太大变化,我以某种方式想到了 "caching" 并将其用于我的应用程序的 CI/CD 并且我想到了 Docker。这将非常有趣,因为我可以维护该图像并与需要处理该项目并在 CI/CD.

中使用它的同事分享
  1. 是否可以为这种用途构建自定义 Docker 图像?
  2. 是否可以完全离线构建这样的图像?我不想上传 100GB 并在构建机器上重新下载它...

谢谢!

1。是的

出于许多不同的原因,我已经使用 docker 构建 Yocto 图像,并且总是取得积极的结果。

2。是的,还有一些工作。

您想利用 Yocto 将构建所需的所有内容缓存在它所谓的“Shared State Cache". This is normally located in your build directory under ${BUILDDIR}/sstate-cache 中这一事实,它包含您正在寻找的内容在这种情况下。如何 有几个选项可以将这些文件传送到您的构建机器。

选项 1 正在使用 sstate mirrors:

这不是完全离线的,但可以让您下载一个更小的缓存并从该缓存中构建,而不是从源中构建。

这是我的 local.conf 文件中的内容:

SSTATE_MIRRORS ?= "\
file://.* http://my.shared-computer.com/some-folder/PATH"

不要忘记最后的路径。这是必需的。构建系统替换目录结构中的正确路径。

选项 2 允许您保留 sstate-cache 的本地副本并从本地构建。

在你的 docker 文件中,创建 sstate-cache 目录(位置在这里并不重要,我喜欢 /opt 用于我的目的):

RUN mkdir -p /opt/yocto/sstate-cache

然后确保在您 运行 构建时绑定这些目录以保留内容,如下所示:

docker run ... -v /place/to/save/cache:/opt/yocto/sstate-cache

编辑构建目录中的 local.conf,使其指向这些文件夹:

SSTATE_DIR ?= "/opt/yocto/sstate-cache"

通过这种方式,您可以以任何最适合您的方式(scp、nfs、sneakernet)将缓存放到构建机器上。

希望对您有所帮助!