我可以构建一个 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.
中使用它的同事分享
- 是否可以为这种用途构建自定义 Docker 图像?
- 是否可以完全离线构建这样的图像?我不想上传 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)将缓存放到构建机器上。
希望对您有所帮助!
我正在为一个项目构建 Yocto 映像,但这是一个漫长的过程。在我强大的开发机器上,它需要大约 3 个小时,并且可以消耗多达 100 GB 的 space.
问题在于最终图像并不是 "necessarily" 最终目标; 运行 是我的应用程序最重要的部分。因此,yocto 配方变化不大,但我的应用程序变化很大。
我想 运行 持续集成 (CI) 我的应用程序甚至持续交付 (CD)。但由于 yocto 构建的大小,两者目前都非常困难。
由于构建没有太大变化,我以某种方式想到了 "caching" 并将其用于我的应用程序的 CI/CD 并且我想到了 Docker。这将非常有趣,因为我可以维护该图像并与需要处理该项目并在 CI/CD.
中使用它的同事分享- 是否可以为这种用途构建自定义 Docker 图像?
- 是否可以完全离线构建这样的图像?我不想上传 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)将缓存放到构建机器上。
希望对您有所帮助!