我可以构build一个Docker镜像来“caching”一个yocto / bitbake构build吗?

我正在为项目构buildYocto图像,但这是一个漫长的过程。 在我的强大的开发机器上,大约需要3个小时,可以消耗高达100 GB的空间。

事情是最终的形象不是“必然”的最终目标; 这是我的应用程序运行在其上,这是重要的。 因此,yocto食谱并没有太大变化,但是我的应用程序确实如此。

我想为我的应用程序运行持续集成(CI),甚至连续交付(CD)。 但是由于yocto构build的规模,现在都很难。

由于构build并没有太大的改变,所以我通过某种方式来“caching”它,并将其用于我的应用程序的CI / CD,而我通过Docker来使用它。 这将是相当有趣的,因为我可以保持这种形象,并与需要在项目中工作并在CI / CD中使用它的同事分享。

  1. 可以build立一个自定义的Docker镜像用于这种使用?
  2. 是否有可能完全离线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机器上。

希望这可以帮助!