1. 版本管理总体流程

1.1 适用场景

本章定义的版本管理总体流程适用于所有需要通过OTA(Over‑The‑Air)方式对嵌入式设备固件进行远程升级的产品线。典型的适用场景包括:

  • 消费电子:智能家居网关、可穿戴设备、扫地机器人等需要固件迭代的终端产品。
  • 汽车电子:T‑Box、IVI(车载信息娱乐系统)、ECU(电子控制单元)的固件升级。
  • 工业物联网:远程传感器、边缘计算节点的固件推送与漏洞修复。
  • 医疗/安防:需要满足合规审计要求,对固件版本进行严格追溯的场景。
提示: 版本管理不是简单的“文件重命名”。它必须覆盖从构建产物生成、签名、发布、部署到回滚的全生命周期,确保设备在任何时刻都能安全、可追溯地升级到预期版本。

1.2 前置条件

在启动版本管理流程之前,必须完成以下基础设施搭建与规则定义:

  • 已建立稳定的CI/CD构建环境,能够自动化输出可重复的构建产物(如 .bin、.hex、.s19)。
  • 已为产品线定义统一的版本号规范(推荐遵循 Semantic Versioning)。
  • 已分配专用存储库(如 S3、Artifactory)用于版本工件的持久化存储。
  • 已完成OTA签名用的私钥/公钥基础设施(PKI)部署。
  • 已编排OTA平台(如阿里云IoT、华为云OTA、自研平台)上的产品/设备群组。
OTA固件版本管理总体流程 1. 源代码提交 2. 构建与打包 3. 版本登记与签名 4. 金丝雀发布 5. 全量部署 6. 版本回滚 7. 热修复提交 回滚触发 重新构建 图例说明 ▸ 主流程:1→2→3→4→5 ▸ 异常分支:5→6(回滚) ▸ 修复回流:6→7→2 ▸ 虚线表示“重新构建” ▸ 颜色代表不同责任阶段

图1.1 OTA固件版本管理总体流程与责任边界示意图

1.3 操作步骤

  1. 源代码提交 & CI 触发: 开发人员完成功能或补丁开发后,向受控分支(如 main、release/*)提交代码。提交动作自动触发 CI 管道。
  2. 构建与打包: CI 系统根据构建脚本编译固件,生成最终交付件(.bin / .hex),同时生成构建元数据(如构建时间、Git Commit ID)。
  3. 版本登记与签名: 构建产物被推送至版本管理服务。系统自动分配唯一版本号(如 2.1.0+build.20240501),并使用私钥对固件包进行签名。
  4. 金丝雀发布(Canary): 将新版本推送至占总量 5% ~ 10% 的预定义设备群组,观察启动、连接、功能等核心指标是否异常。
  5. 全量部署: 金丝雀观察期(例如 24 小时)通过后,系统逐步扩大发布范围,直至覆盖全部目标设备。
⚠️ 异常回滚分支: 如果在全量部署过程中发现崩溃率上升或关键功能不可用,须立即触发版本回滚。回滚后的代码应进入热修复提交流程,并在修复后重新执行第 2 ~ 5 步。

1.4 输入输出物

类别 输入物 输出物
代码/配置 嵌入式 C/C++ 源码、设备树(DTS)、构建配置文件 固件二进制(.bin / .hex)、SBOM(软件物料清单)
元数据 需求文档、Release Plan 版本清单 JSON、ChangeLog / Release Notes
签名/安全 代码签名私钥(HSM 保护)、证书链 签名后的固件包、哈希校验文件(.sha256)
部署策略 设备群组划分表、灰度规则 OTA 任务 ID、部署报告、设备升级状态记录

1.5 责任边界

角色 职责范围
嵌入式开发 负责代码的实现、自测、Pull Request 的发起,确保每次提交都具备可构建性。
QA / 测试 负责对金丝雀版本进行功能测试、自动化回归测试,并签署版本准出报告。
DevOps / 平台 维护 CI/CD 管道、版本数据库、OTA 分发平台,确保签名与发布流程的可靠性。
产品管理 定义设备群组范围、灰度比例、发布窗口,并在出现重大异常时决策是否回滚。
运维 / SRE 监控部署过程中的设备在线率、升级成功率、崩溃率,并在指标恶化时触发告警。

1.6 异常处理

异常情况与处置策略:
  • 版本号冲突(CI 阻塞): 当新构建的版本号与已存在的版本号重复时,CI 管道应自动失败。处置方案:检查构建计数器或 Commit ID 是否未正确更新,手动重试或重置计数器。
  • 签名失败(安全阻断): 签名服务不可用或私钥权限异常。处置方案:立即告警至 DevOps,禁止未经签名的固件包流入 OTA 平台。
  • 设备离线(升级不达预期): 部分设备在升级窗口期间离线。处置方案:由 OTA 平台异步重试,超过最大重试次数的设备列入“待处理”列表并通知运维。
  • 金丝雀指标恶化(自动回滚): 如果金丝雀设备群的崩溃率超过阈值(例如 2%),平台应自动触发回滚,并锁定该版本禁止全量发布。

1.7 记录材料

每个版本的完整生命周期记录必须被持久化,以备合规审计与问题追踪。典型记录材料包括:

  • 版本清单文件: 记录版本号、产物哈希、构建 Commit、签名指纹、发布时间。
  • 发布说明(Release Notes): 列举新特性、修复的问题、已知限制。
  • OTA 部署报告: 包含目标设备数、成功数、失败数、回滚数、总耗时。

版本清单示例(JSON 格式):

{
  "version": "2.1.0+build.20240501",
  "product": "SmartSensor-X",
  "target_platform": "esp32-s3",
  "checksum_sha256": "a1b2c3d4e5f678901234567890abcdef1234567890abcdef1234567890abcdef",
  "signature_algorithm": "ECDSA-P256",
  "release_date": "2024-05-01T10:30:00Z",
  "deployment_strategy": "canary",
  "change_log_url": "https://artifact.example.com/release-notes/v2.1.0.md"
}

1.8 验收标准

✅ 流程验收检查点:
  • 每个构建产物都有一个全局唯一的版本号,且与源代码 Commit 一一对应。
  • 设备端能够验证固件包的签名完整性,拒绝运行未签名或签名无效的固件。
  • OTA 平台能够实时显示部署进度,并提供按设备粒度的升级成功/失败明细。
  • 从“触发回滚”到“全量设备回退至上一稳定版本”的流程在 30 分钟内可完成。
  • 版本记录(含回滚记录)在审计系统中至少保留 180 天且不可篡改。