在我的 local.conf 中,我定义了以下变量:
MACHINE ?= "default"
# Version variables overriden by CI/CD
CI_COMMIT_BRANCH ?= "local"
BUILD_VERSION ?= "v0.0.0"
CI_COMMIT_SHORT_SHA ?= "local version"
在菜谱(custom-fit-image.bb)中,我使用这些变量:
python do_image_complete() {
machine = d.getVar('MACHINE', expand=True)
version_tag = d.getVar('BUILD_VERSION', expand=True)
branch_type = d.getVar('CI_COMMIT_BRANCH', expand=True)
git_short_hash = d.getVar('CI_COMMIT_SHORT_SHA', expand=True)
bb.note(f"MACHINE: {machine}; BUILD_VERSION: {version_tag};CI_COMMIT_BRANCH: {branch_type};CI_COMMIT_SHORT_SHA: {git_short_hash}")
....
....
}
addtask do_image_complete before do_populate_sysroot after do_install
当我从命令行调用 bitbake 时,我想像这样覆盖它们:
MACHINE=my_machine CI_COMMIT_BRANCH=bli BUILD_VERSION=bla CI_COMMIT_SHORT_SHA=blub bitbake custom-fit-image
但是只有机器才会被覆盖。这里是 do_image_complete 函数的 bb.note 调用的输出:
NOTE: MACHINE: my_machine; BUILD_VERSION: v0.0.0;CI_COMMIT_BRANCH: local;CI_COMMIT_SHORT_SHA: local version
为什么只有 MACHINE 被覆盖?如何覆盖其他变量? 我能看到的唯一区别是 MACHINE 是在很多地方使用的标准 yocto 变量,其他变量是我的自定义变量。但它们仍然在同一个文件中定义,我尝试以相同的方式覆盖它们。所以我有点困惑。
查看 bitbake 手册中的 BB_ENV_PASSTHROUGH_ADDITIONS:
您将看到默认的脚本/oe-buildenv-internal 脚本设置 BB_ENV_PASSTHROUGH_ADDITIONS_OE 以包括 MACHINE、DISTRO、TCMODE、TCLIBC、HTTP_PROXY、http_proxy 等。