GitLab CI Yocto Build - 如何使用 SSTATE 和 DL_DIR

GitLab CI Yocto Build - How to use SSTATE and DL_DIR

如何配置 GitLab CI 来存储多个作业之间的 SSTATE_DIRDL_DIR?目前,bitbake 每次都重新构建完整的项目,非常耗时。所以我想再次使用 stage。我尝试了缓存,但由于 zip/unzip 开销很大,构建时间实际上增加了。

我什至不需要在多个项目之间共享 sstate,只需要一种在作业之间存储输出的方法。

我正在使用 Gitlab 11.2.3 和一个 shell 执行器作为运行器。

非常感谢!

如果您为此只使用一个运行器,您可能会使用 GIT_STRATEGY: none,它将为以下工作重新使用项目工作区; relevant documentation。但是,如果您有多个需要运行程序的作业 运行,这就不会非常准确,因为如果作业是从不同的管道启动的,它可能会稀释存储库。

另一种方式,如果您仍在使用一个运行器,您可以将目录复制出来并复制回您需要的作业中。

否则,您可能会运气不好,必须等待 sticky runners 问题。

您可以简单地在作业之间重用共享状态缓存,如下所示:

Specify 到你的 .yml 文件中的 sstate-cache 目录的路径 gitlab-ci 管道。来自我的一个示例片段:

myrepo.yml

stages:
  ...
  ...

variables:
  ...
  TCM_MACHINE: buzby2
  ...
  SSTATE_CACHE: /sstate-cache/$TCM_MACHINE/PLAT3/
  PURGE_SSTATE_CACHE: N
  ...

在我的例子中 /sstate-cache/$TCM_MACHINE/PLAT3/ 是 docker 容器中的一个目录 运行构建。此路径安装在 docker 容器中 构建服务器文件系统上的永久 sstate 缓存目录,/var/bitbake/sstate-cache/<machine-id>/PLAT3.

PURGE_SSTATE_CACHE 可被私有变量覆盖 在管道计划设置中,以便我可以选择删除缓存以进行干净利落 构建。

确保 SSTATE_CACHE 的设置附加到 bitbake conf/local.conf 构建文件,例如

.build_image: &build_image
  stage: build
  tags:
    ...
  before_script:
    ...
  script:
    - echo "SSTATE_DIR ?= \"$SSTATE_CACHE\"" >> conf/local.conf
    ...

如果您使用相同的模式,请将其应用于 DL_DIR

你在.yml文件中使用的变量可以被gitlab-ci触发器覆盖 或时间表变量。参见 Priority of variables

在11.10版本中,添加了GIT_CLEAN_FLAGS,可以用来实现你想用shell执行器做的事情。

为了完整性:当使用 docker 执行器时,这可以通过使用 docker 卷来实现,这些卷在构建中是持久的。