何时更新 CI 服务器上的 Yocto sstate-cache

问题描述 投票:0回答:1

我们的 Yocto CI 脚本会在每次构建时恢复 sstate 缓存,并在 bitbake 通过 rsync 成功时更新它。我们的目的是通过不重建我们已有的包来加速 CI 构建。

问题在于,无论使用哪个分支运行 bitbake,sstate-cache 都会更新。

这意味着任何成功的构建都会更新用于所有 CI 构建的 sstate-cache。因此,如果 CI 在更新大量包的临时/实验分支上运行,则 sstate-cache 会相应更新,如果下一个构建不使用相同版本的包,则速度会慢得多,并再次更新 sstate -缓存及其包的版本。

我想知道在这种情况下更新状态缓存的最佳实践是什么?

continuous-integration yocto
1个回答
0
投票

块引用 这意味着任何成功的构建都会更新用于所有 CI 构建的 sstate-cache。因此,如果 CI 在更新大量包的临时/实验分支上运行,则 sstate-cache 会相应更新,如果下一个构建不使用相同版本的包,则速度会慢得多,并再次更新 sstate -缓存及其包的版本。

我认为这里有错误的假设/观察。 假设是:当从主分支构建,然后是分支功能时,sstate-cache 将包含分支功能的工件。

事实是:它将保存来自主分支和功能分支的工件。对于两个分支,下一次重建速度应该(几乎)相同。将功能合并到主程序后,构建主程序将重用之前构建功能所生成的工件。 我从未注意到构建时间的差异,可能是由于状态缓存的大小较大。

我所做的并且在我看来效果很好的程序是:

  • 为每个分支共享状态缓存,
  • sstate-cache 通过 nfs 在多个构建机器之间共享,即使对于并发构建,它也能很好地工作。
  • 在具有相同机器的项目之间共享 sstate-cache(选项,但有意义)。
  • 在所有项目之间共享 DL_DIR。
  • 定期运行不带 SSATE_DIR 和 DL_DIR 的构建,只是为了确保仍然可以下载和构建所有内容。

如果您想清理(例如,在 yocto 更新后),只需临时更改目录名称,然后重建,如果有效,请删除旧目录。

© www.soinside.com 2019 - 2024. All rights reserved.