如何配置GitLab CI来存储几个作业之间的SSTATE_DIR
和DL_DIR
?目前,bitbake每次都会重建整个项目,这非常耗时。所以我想再次使用sstage。我尝试了缓存,但由于拉链/解压缩开销很大,因此构建时间有效增加。
我甚至不需要在几个项目之间共享sstate,只是在作业之间存储输出的方法。
我正在使用Gitlab 11.2.3和一个shell执行器作为跑步者。
非常感谢!
如果你只使用一个跑步者,你可能会使用GIT_STRATEGY: none
,它将重新使用项目工作区来完成以下工作; relevant documentation。但是,如果您有多个需要运行的作业,这可能不会非常准确,因为如果从不同的管道启动作业,它可能会稀释存储库。
另一种方式,如果您仍在使用一个跑步者,您可以将目录复制出来并重新打印到您需要的工作中。
否则,你可能会失去运气,并且必须等待sticky runners问题。
您可以在作业之间重用共享状态缓存,如下所示:
在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