我正在为一个项目构建 Yocto 图像,但这是一个漫长的过程。在我强大的开发机器上,它需要大约 3 个小时,最多可以消耗 100 GB 的空间。
问题是最终图像“不一定”是最终目标;重要的是我的应用程序运行在它之上。因此,yocto 的食谱变化不大,但我的应用程序变化很大。
我想为我的应用程序运行持续集成 (CI) 甚至持续交付 (CD)。但是由于 yocto 构建的大小,现在两者都非常困难。
由于构建没有太大变化,我想以某种方式“缓存”它并将其用于我的应用程序的 CI/CD 和我的 Docker。这将非常有趣,因为我可以维护该图像并与需要处理该项目并在 CI/CD 中使用它的同事共享它。
谢谢!
1. 是的。
由于许多不同的原因,我使用 docker 来构建 Yocto 图像,总是有积极的结果。
2. 是的,有一些工作。
您想利用 Yocto 将构建所需的所有内容缓存在它所谓的“共享状态缓存”中这一事实。这通常位于${BUILDDIR} /sstate-cache下的构建目录中,在这种情况下,它包含您正在寻找的内容。有一对夫妇的选择如何将这些文件到您的生成计算机。
选项 1使用sstate 镜像:
这不是完全脱机,但可以让您下载更小的缓存并从该缓存构建,而不是从源。
这是我的 local.conf 文件中的内容:
SSTATE_MIRRORS ?= "\
file://.* http://my.shared-computer.com/some-folder/PATH"
Run Code Online (Sandbox Code Playgroud)
不要忘记最后的 PATH。那是必需的。构建系统会替换目录结构中的正确路径。
选项 2允许您保留 sstate-cache 的本地副本并从本地构建。
在您的 dockerfile 中,创建 sstate-cache 目录(这里的位置并不重要,我喜欢 /opt 用于我的目的):
RUN mkdir -p /opt/yocto/sstate-cache
Run Code Online (Sandbox Code Playgroud)
然后确保在运行构建时绑定这些目录以保留内容,如下所示:
docker run ... -v /place/to/save/cache:/opt/yocto/sstate-cache
Run Code Online (Sandbox Code Playgroud)
编辑构建目录中的 local.conf,使其指向以下文件夹:
SSTATE_DIR ?= "/opt/yocto/sstate-cache"
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以以最适合您的任何方式(scp、nfs、sneakernet)将缓存放到构建机器上。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
2691 次 |
| 最近记录: |