Azure Pipeline配置:为每个分支设置独立Yocto构建目录
实现Yocto分支独立构建目录的方案
要让两个Yocto分支拥有独立的构建目录(包含sstate-cache等元数据),核心是用分支名称动态生成专属构建目录,避免不同分支共享同一目录导致的冲突。以下是针对你的Azure Pipeline配置的具体修改步骤:
1. 动态生成分支专属构建目录
修改variables中的YOCTO_BUILD_DIR,将分支名称作为目录名的一部分,确保每个分支的构建目录唯一:
variables: # 保留原有其他变量 IMAGE_NAME: texas-image IMAGE_FILE: texas-image.rootfs.wic.xz META_LAYERS: yocto-meta-layers YOCTO_RELEASE: kirkstone YOCTO_SOURCES: yocto-linux # 用分支名称生成独立构建目录,例如build-development-image、build-production-image YOCTO_BUILD_DIR: 'build-$(Build.SourceBranchName)' # 保留原有其他变量 FIT_IMAGE_DIR: tools/tftp_u-boot FIT_IMAGE_NAME: puma # ... 其余变量不变 ...
2. 调整构建环境初始化命令
原配置中oe-init-build-env默认使用当前目录下的build文件夹,现在需要指定我们动态生成的目录,在PrepareEnv和BuildImage任务的bash脚本中修改source命令:
# 替换原有的 source ${META_LAYERS}/poky/oe-init-build-env source ${META_LAYERS}/poky/oe-init-build-env $(YOCTO_BUILD_DIR)
3. 适配所有引用构建目录的步骤
确保Pipeline中所有用到YOCTO_BUILD_DIR的地方都使用新的动态路径,比如:
BuildFitImage任务中的软链接创建:
ln -s ../../$(YOCTO_BUILD_DIR)/tmp/deploy/images/am64xx-evm bin
Publish阶段的文件复制路径:
sourceFolder: '$(YOCTO_BUILD_DIR)/tmp/deploy/images/am64xx-evm'
4. 可选:构建前清理旧目录(避免残留)
如果需要确保每次构建都是干净的,可以在DownloadResources任务中添加清理步骤:
- task: DeleteFiles@1 displayName: "清理分支专属构建目录" inputs: SourceFolder: $(YOCTO_BUILD_DIR) Contents: '*' RemoveSourceFolder: true
修改后的关键配置片段示例
变量部分
variables: IMAGE_NAME: texas-image IMAGE_FILE: texas-image.rootfs.wic.xz META_LAYERS: yocto-meta-layers YOCTO_RELEASE: kirkstone YOCTO_SOURCES: yocto-linux YOCTO_BUILD_DIR: 'build-$(Build.SourceBranchName)' FIT_IMAGE_DIR: tools/tftp_u-boot FIT_IMAGE_NAME: puma # ... 其余变量保持不变 ...
PrepareEnv任务的bash脚本
echo Initializing Yocto build environment source ${META_LAYERS}/poky/oe-init-build-env $(YOCTO_BUILD_DIR) echo "Adding layers to bblayers.conf" pwd if ! grep -q meta-oe conf/bblayers.conf; then bitbake-layers add-layer ../${META_LAYERS}/meta-openembedded/meta-oe; fi if ! grep -q meta-python conf/bblayers.conf; then bitbake-layers add-layer ../${META_LAYERS}/meta-openembedded/meta-python; fi # ... 其余添加层的命令保持不变 ...
BuildImage任务的bash脚本
source ${META_LAYERS}/poky/oe-init-build-env $(YOCTO_BUILD_DIR) bitbake ${IMAGE_NAME}
这样修改后,每个分支的构建都会在以自身分支名命名的目录下进行,sstate-cache、tmp等元数据完全独立,不会互相干扰。
内容的提问来源于stack exchange,提问作者grandzello
相关产品推荐
相关产品推荐

