ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

openpilot 如何按 release 流程把 staging 分支推进到正式发布?

openpilot 如何按 release 流程把 staging 分支推进到正式发布? openpilot 如何按 release 流程把 staging 分支推进到正式发布【免费下载链接】openpilotopenpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars.项目地址: https://gitcode.com/GitHub_Trending/op/openpilotopenpilot 的每次正式发版都遵循同一套流程:先把 master 上冻结好的版本推到 staging 分支做设备端构建和测试,确认通过后在 staging 构建结果上打 tag,再创建 GitHub release 并更新线上安装入口。这套流程的官方清单在 tools/release/README.md 中,分为 “Go to staging” 和 “Go to release” 两个阶段。本文按该清单给出完整的操作路径、每一步用到的构建脚本实际做了什么,以及脚本内置的硬性校验条件。前提:操作者在 openpilot 仓库中拥有推送权限(包括向devel-staging和发布 tag 推送),Jenkins 与测试设备侧由 CI 自动完成。清单中涉及的设备端构建、test_onroad测试均由 Jenkins 触发,操作者本地只需执行推送、打 tag 等 git 操作。release 流程的两个阶段tools/release/README.md 定义的清单结构是:Go to staging:创建 release 分支并回退风险提交 → 用build_stripped.sh推送到devel-staging→ Jenkins 自动在设备上构建 staging 并运行test_onroad→ 在 master 上把版本号 bump 到下一个开发版本。Go to release:完成升级/回退/全新安装等测试清单 → 把本地对齐到origin/release-mici-staging构建分支 → 打 tag 并推送 → 创建 GitHub release → 在openpilot.comma.ai做最终测试安装并更新 factory provisioning → 关闭 milestone 和 issue。仓库的 Jenkinsfile 中,分支名匹配devel-staging、release-tizi-staging、release-mici-staging等分支时会跳过常规测试流水线(它们出现在excludeBranches列表中),devel-staging分支则单独触发设备端 release 构建,这与清单中 “Jenkins will then automatically build staging on device” 对应。阶段一:创建 release 分支并推送到 staging创建并推送 release master 分支清单要求先建一个 GitHub issue 用该 checklist 跟踪本次 release,然后:从 upstream master 创建一个 release master 分支。清单给出的示例是:为 releasev0.10.2创建名为zerotentwo的分支。在该分支上回退风险提交(revert risky commits),清单注明需要与 autonomy team 双重确认。推送这个新分支。运行 build_stripped.sh 推送到 devel-staging确认当前所在分支是刚创建的 release 分支后,在仓库根目录执行:BRANCHdevel-staging tools/release/build_stripped.sh这条命令会向远端force push覆盖devel-staging分支,属于破坏性操作,只在 release 分支上运行。tools/release/build_stripped.sh 的实际行为:用mktemp -d创建一个临时目标目录,把仓库的.git复制进去,创建一个 orphan 分支tmp;按 tools/release/release_files.py 输出的文件清单把源码复制到临时目录,并删除.git/modules/;对openpilot/selfdrive/modeld/models下大于 95M 的*.onnx文件用openpilot/common/file_chunker.py切块;从openpilot/common/version.h读取版本号,连同源 commit hash 与构建时间写入提交信息(提交身份由 tools/release/identity.sh 设置为Vehicle Researcher usercomma.ai);依次做三项硬性校验,任一不满足就exit 1:存在 submodule、存在 LFS 文件(git lfs ls-files非空)、存在超过 95M 的文件(脚本注释说明是为满足 GitHub 的 100MB 限制);最后以pack.window0 pack.depth0 pack.compression0的参数执行git push -f origin tmp:$BRANCH,即把构建好的 stripped 树推到devel-staging。$BRANCH未设置时脚本只生成本地临时目录不推送;本场景必须显式传BRANCHdevel-staging。Jenkins 自动构建设备端 staging 分支推送到devel-staging后不需要人工干预:Jenkinsfile 在env.BRANCH_NAME devel-staging时,锁定tizi-needs-can设备执行RELEASE_BRANCHrelease-tizi-staging,release-mici-staging $SOURCE_DIR/tools/release/build_release.sh其中$SOURCE_DIR是 CI 环境中的 openpilot 源码路径(Jenkinsfile 中设置为/data/openpilot_source/)。tools/release/build_release.sh 在设备上完成:未设置RELEASE_BRANCH时直接exit 1,所以上面的环境变量必须带;在/data/openpilot建 worktree,按release_files.py文件清单复制源码;把 CPU 频率上限提到cpuinfo_max_freq,然后执行scons全量构建;若设置了INCLUDE_BIG_MODEL,会检查openpilot/selfdrive/modeld/models/big_driving_tinygrad.pkl.chunkmanifest存在;未设置PANDA_DEBUG_BUILD时用CERT/data/pandaextra/certs/release RELEASE1 scons panda/构建 release 版 panda 固件;校验 release 中不存在 submodule,否则退出;清理.a/.o/.os/.pyc/__pycache__及Jenkinsfile、tools/release/等文件,touch prebuilt标记为预构建版本;运行RELEASE1 ./openpilot/selfdrive/test/test_onroad.py;把构建结果分支release-mici-stagingforce push 到RELEASE_BRANCH逗号分隔的每个分支,即release-tizi-staging和release-mici-staging。这就是清单里 “Jenkins will then automatically build staging on device, runtest_onroadand update the staging branch” 的具体实现。构建与测试通过即表示 staging 侧就绪,清单最后一步是在 Discord 上 release crew 通知。在 master 上更新版本号staging 推送完成后,清单要求在 master 上 bump 版本,涉及两处:openpilot/common/version.h,当前内容为#define COMMA_VERSION 0.11.2,构建脚本从这一行提取版本号写入 release 提交信息;RELEASES.md,按既有格式在文件头部追加一条版本记录,例如已有条目形如Version 0.11.2 (2026-08-12)后跟功能与车型支持的项目符号列表。阶段二:从 staging 推进到正式发布正式发布前的测试清单清单在 “Go to release” 一节列出的必测项,全部通过后才继续:从上一个 release 升级到新 release;从新 release 降级回上一个 release;使用openpilot-test.comma.ai全新安装;在全新安装上实际驾驶验证;release 中没有 submodule 或 LFS(对应build_stripped.sh的校验项);检查 MTBF 等指标;production 上的 stress test 通过。对齐构建分支、打 tag 并创建 GitHub release测试通过后,清单给出的命令依次是(两条命令中的v0.X.X替换为本次发布的版本号,如v0.10.2;commit-hash替换为本次 release 对应的 commit hash):git reset --hard origin/release-mici-staginggit reset --hard会丢弃当前分支上的本地改动,执行前先确认工作区没有未提交内容。该命令把本地 HEAD 对齐到 Jenkins 构建并推送的release-mici-staging分支,即发布对象必须是设备端实际构建、跑过test_onroad的那份树。git tag v0.X.X commit-hash git push origin v0.X.Xtag 打在 release 对应的 commit 上并推送到远端,这是正式发布版本号的标记。随后在 GitHub 上创建对应的 GitHub release。收尾动作清单剩余步骤:在openpilot.comma.ai上做最终测试安装,确认线上安装入口指向新 release;更新 factory provisioning;关闭本次 release 的 milestone 和跟踪 issue;在 Discord、X 等渠道发布公告(清单同时要求在正式 release 前发布 blog post)。构建链路上的硬性校验与失败信号整条流程的自动校验点,出现以下信号即视为构建失败:校验点所在位置失败条件无 submodule、无 LFS、无大于 95M 的文件build_stripped.sh任一条件不满足即exit 1,staging 分支不会被更新RELEASE_BRANCH必须设置build_release.sh未设置直接exit 1release 中不得包含 submodulebuild_release.shgit submodule--helper list非空则退出并打印列表test_onroad通过build_release.sh运行RELEASE1 ./openpilot/selfdrive/test/test_onroad.py,脚本带set -e,失败则不会执行后续的 push构建后工作区干净check-dirty.shgit status --porcelain非空则失败(Jenkins 常规流水线的 onroad 阶段使用)流程到此以实际验证结果收尾:staging 分支更新成功说明设备端构建与test_onroad已通过,tag 与 GitHub release 创建完成、openpilot.comma.ai最终测试安装通过、factory provisioning 更新后,本次 release 即按 tools/release/README.md 清单闭环。【免费下载链接】openpilotopenpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars.项目地址: https://gitcode.com/GitHub_Trending/op/openpilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表