我可以构build一个Docker镜像来“caching”一个yocto / bitbake构build吗?
我正在为项目构buildYocto图像,但这是一个漫长的过程。 在我的强大的开发机器上,大约需要3个小时,可以消耗高达100 GB的空间。
事情是最终的形象不是“必然”的最终目标; 这是我的应用程序运行在其上,这是重要的。 因此,yocto食谱并没有太大变化,但是我的应用程序确实如此。
我想为我的应用程序运行持续集成(CI),甚至连续交付(CD)。 但是由于yocto构build的规模,现在都很难。
由于构build并没有太大的改变,所以我通过某种方式来“caching”它,并将其用于我的应用程序的CI / CD,而我通过Docker来使用它。 这将是相当有趣的,因为我可以保持这种形象,并与需要在项目中工作并在CI / CD中使用它的同事分享。
- 可以build立一个自定义的Docker镜像用于这种使用?
- 是否有可能完全离线build立这样的形象? 我不想上传100GB,必须重新下载构build机器…
谢谢!
是的。
我使用docker来build立Yocto图像有许多不同的原因,总是有积极的结果。
是的,有一些工作。
你想利用Yoctocaching你所需要的所有东西来完成它所谓的“ 共享状态caching ”的事实。 这通常位于$ {BUILDDIR} / sstate-cache下的构build目录中,并且在这种情况下它正好包含您正在查找的内容。 有几个选项可以将这些文件传送到您的编译机器。
选项1使用状态镜像 :
这不是完全脱机的,但可以让你下载一个更小的caching,并从该caching构build,而不是从源代码。
以下是我的local.conf文件中的内容:
SSTATE_MIRRORS ?= "\ file://.* http://my.shared-computer.com/some-folder/PATH"
最后不要忘记PATH。 这是必需的。 构build系统在目录结构中replace正确的path。
选项2可让您保留sstate-cache的本地副本,并从本地进行构build。
在您的dockerfile中,创buildsstate-cache目录(位置在这里不重要,我喜欢/select我的目的):
RUN mkdir -p /opt/yocto/sstate-cache
然后确保在运行构build时绑定这些目录以保留内容,如下所示:
docker run ... -v /place/to/save/cache:/opt/yocto/sstate-cache
在编译目录中编辑local.conf,使其指向这些文件夹:
SSTATE_DIR ?= "/opt/yocto/sstate-cache"
通过这种方式,您可以以任何最适合您的方式(scp,nfs,sneakernet)将caching放到构build机器上。
希望这可以帮助!