You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:01:03