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

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

如何配置GitLab CI来存储几个作业之间的SSTATE_DIRDL_DIR?目前,bitbake每次都会重建整个项目,这非常耗时。所以我想再次使用sstage。我尝试了缓存,但由于拉链/解压缩开销很大,因此构建时间有效增加。

我甚至不需要在几个项目之间共享sstate,只是在作业之间存储输出的方法。

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

非常感谢!

gitlab yocto gitlab-ci-runner bitbake
2个回答
1
投票

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

另一种方式,如果您仍在使用一个跑步者,您可以将目录复制出来并重新打印到您需要的工作中。

否则,你可能会失去运气,并且必须等待sticky runners问题。


1
投票

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

在gitlab-ci管道的.yml文件中指定sstate-cache目录的路径。我的一个示例片段:

myrepo.yml

stages:
  ...
  ...

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

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

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

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