【问题标题】:Can I build a Docker image to "cache" a yocto/bitbake build?我可以构建一个 Docker 映像来“缓存”一个 yocto/bitbake 构建吗?
【发布时间】:2016-08-09 08:41:43
【问题描述】:

我正在为一个项目构建 Yocto 映像,但这是一个漫长的过程。在我功能强大的开发机器上,大约需要 3 个小时,最多可消耗 100 GB 的空间。

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

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

由于构建没有太大变化,我想以某种方式“缓存”它并将其用于我的应用程序的 CI/CD,我想使用 Docker。这将非常有趣,因为我可以维护该图像并与需要处理该项目并在 CI/CD 中使用它的同事分享。

  1. 可以为这种用途构建自定义 Docker 映像吗?
  2. 是否可以完全离线构建这样的映像?我不想上传 100GB 并且必须在构建机器上重新下载...

谢谢!

【问题讨论】:

    标签: docker yocto


    【解决方案1】:

    1.是的。

    出于许多不同的原因,我使用 docker 构建 Yocto 映像,总能获得积极的结果。

    2.是的,有一些工作。

    您想利用 Yocto 将构建所需的所有内容缓存在它所谓的“Shared State Cache”中这一事实。这通常位于${BUILDDIR}/sstate-cache 下的构建目录中,它包含您在这种情况下要查找的内容。 如何有几个选项可以将这些文件传送到您的构建机器。

    选项 1 正在使用 sstate mirrors:

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

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

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

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

    选项 2 让您保留 sstate-cache 的本地副本并在本地构建。

    在您的 dockerfile 中,创建 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)将缓存放到构建机器上。

    希望这会有所帮助!

    【讨论】:

    • 我最后做了类似的事情。我将 gitlab-ci-multi-runner 与 docker executor 一起使用。因此,我(还没有)Dockerfile:我的 CI 配置告诉 Docker 使用 ubuntu:16.04 作为图像。在我的 CI 配置中,我创建了一个指向 /cache 的符号链接,名为 build。然后,在运行器配置中,我将/cache 设置为rw 卷,这样我就可以在运行之间保留整个build 目录,包括sstate、下载等。不过我的问题略有不同;我可以创建一个包含build 内容的新图像吗?但这可能没有意义,因为我想要的只是一个缓存。
    • @big_gie 我同意,缓存可能是您想要的。你当然可以告诉 docker 从某个地方拉入一个完整的构建目录,但这会浪费大量空间/时间,并且不能利用 Yocto 的缓存功能。很高兴你解决了一些问题!
    • 对于 Option2,您将跑步者限制为仅并行执行一项工作?我想否则这是行不通的,因为多个作业将并行写入 sstate-cache。
    猜你喜欢
    • 2015-06-04
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2018-01-01
    相关资源
    最近更新 更多