三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

08-配置管理核心落地:代码、文档、固件、资源统一配置基线

08-配置管理核心落地:代码、文档、固件、资源统一配置基线

08-配置管理核心落地:代码、文档、固件、资源统一配置基线

这是CMMI3系列的第四篇,聊一个很多人觉得"枯燥但逃不掉"的话题——配置管理。
代码版本乱了、固件刷错版本了、文档跟代码对不上……这些问题配置管理都能治。CMMI3里配置管理(CM)是成熟度二级就有的过程域,但到三级要求更系统。小微企业做不好配置管理,等于裸奔。


一、配置管理在CMMI3中的核心地位

1.1 什么是配置管理

配置管理(Configuration Management,简称CM)不是"管配置文件",而是对项目过程中产生的所有工作产品进行版本化管理和变更控制

通俗理解:项目开发中会产生代码、文档、固件、安装包、数据库脚本、部署脚本等一堆东西,配置管理就是确保任何时候都能拿到任何一个版本的任何一件东西,并且任何变更都有记录、有审批、可追溯

1.2 为什么小微企业更需要配置管理

大公司有专人做配置管理(CMO/CC),小微企业没有专职人员,更容易出问题:

  • 客户说"上个版本是好的,这个版本有问题",你找不回上个版本
  • 硬件同事刷了一个固件,不知道是哪个版本的,跑起来行为不对
  • 三个开发同时改一个文件,互相覆盖
  • 交付的文档和实际代码不一致
  • 上线后发现有个紧急bug要修,但已经分不清哪个分支是生产环境的

这些问题每一个都能让你加班到凌晨。

1.3 CMMI CM过程域的四个目标

CMMI3的CM过程域包含四个特定目标(SG):

目标内容一句话理解
SG1 建立基线识别配置项、建立配置管理系统、创建基线选好东西、建好库、拍好照
SG2 跟踪变更跟踪配置项变更请求、控制变更改东西要走流程
SG3 建立完整性建立配置管理记录、执行配置审计有记录、有检查

二、配置项识别:什么东西要管

2.1 配置项分类

不是所有文件都需要配置管理。配置项分为受控配置项非受控配置项

受控配置项(必须纳入配置管理):

类别具体内容存储位置
源代码各端源码、脚本、配置文件Git仓库
技术文档需求文档、设计文档、测试文档、接口文档Git仓库/Wiki
固件STM32固件.bin、RK3588 boot.img/system.img制品库/Nexus
APK安卓工控端安装包制品库/Nexus
小程序包小程序发布包微信平台+本地备份
AI模型YOLO权重文件(.pt/.onnx/.rknn)制品库/对象存储
数据库脚本DDL脚本、初始化数据脚本、迁移脚本Git仓库
部署脚本Dockerfile、docker-compose.yml、K8s manifests、CI/CD配置Git仓库
项目管理文档项目计划、WBS、风险登记册项目管理工具/Git

非受控配置项(不需要正式配置管理):

  • 开发过程中的临时笔记
  • 调试用日志文件
  • 个人本地配置(IDE配置等)

2.2 配置项命名规范

命名规范是配置管理的基础,没有规范就无法追溯。

建议命名规则:

{项目缩写}_{配置项类型}_{版本号}_{日期}_{构建号}

示例:

VEND_APK_v1.2.0_20260807_build42.apk VEND_FW_STM32_v0.3.1_20260801.bin VEND_MODEL_YOLOv8s_v2.1_20260720.rknn VEND_DB_migration_v1.0_20260805.sql

2.3 版本号规范

采用语义化版本号(Semantic Versioning):

主版本.次版本.修订号 (Major.Minor.Patch) v1.0.0 → 初版 v1.0.1 → 修了个bug(Patch) v1.1.0 → 加了个小功能(Minor) v2.0.0 → 架构大改,不兼容旧版(Major)

固件和模型文件额外加构建号(Build Number),每次编译递增:

v1.2.0_build42 → v1.2.0的第42次编译

三、配置基线建立

3.1 什么是基线

基线是在某个时间点对一组配置项的正式快照。基线一旦建立,其中的配置项就被"冻结",任何修改都必须走变更控制流程。

CMMI项目中通常建立以下基线:

基线名称建立时机包含内容审批人
需求基线需求评审通过后需求规格说明书、接口定义文档项目经理+客户
设计基线设计评审通过后架构设计文档、详细设计文档、数据库设计技术负责人
产品基线测试通过后源代码、固件、APK、部署脚本、模型文件、文档项目经理
发布基线正式发布前产品基线全部内容 + 发布说明 + 安装手册项目经理+客户

3.2 基线建立流程

1. PM发起基线建立申请 ↓ 2. 配置管理员(CMO)收集配置项,验证完整性 ↓ 3. 生成基线清单(含每个配置项的版本号和哈希值) ↓ 4. 审批人签字确认 ↓ 5. 基线入库,打标签(Tag) ↓ 6. 通知所有干系人

小微企业可以简化:PM兼任CMO,基线建立用Git Tag + 一份基线清单表格即可。

3.3 基线清单模板

配置项版本号存储位置哈希值(MD5)备注
后端源码v1.0.0Git: backend@commit abc123Tag: REL-1.0.0
安卓APKv1.0.0_build30Nexus: vend-apk/1.0.0a1b2c3d4…
STM32固件v0.3.1Nexus: vend-fw/0.3.1e5f6g7h8…
YOLO模型v2.1OSS: models/yolov8s_v2.1.rknni9j0k1l2…
数据库脚本v1.0Git: db-scripts@commit def456
需求文档v1.0Git: docs/requirements@v1.0

哈希值的作用:确保固件/模型文件没有被篡改。特别是固件烧录到工控板后,可以通过哈希值验证烧录的是正确版本。


四、变更控制与版本追溯

4.1 变更控制流程

基线建立后,任何配置项的修改都必须走变更控制流程(CCB流程)

1. 提交变更申请单(CR) - 变更内容、变更原因、影响分析 ↓ 2. 变更控制委员会(CCB)评审 - 小微企业CCB可以只有3人:PM+技术负责人+客户代表 ↓ 3. 评审结论:批准 / 驳回 / 需更多信息 ↓ 4. 执行变更(在独立分支上修改) ↓ 5. 验证变更(测试+评审) ↓ 6. 合并变更,更新基线 ↓ 7. 记录变更,通知干系人

4.2 变更申请单模板

字段示例
变更编号CR-2026-007
申请人张三
申请日期2026-08-07
变更类型需求变更 / 缺陷修复 / 优化改进
变更内容商品识别接口增加"称重辅助校验"逻辑
变更原因客户反馈纯视觉识别在遮挡场景下误差大
影响分析影响AI推理接口、交易服务结算逻辑;预估增加3天工期
CCB意见批准,纳入Sprint 4
执行人李四
验证结果测试通过,识别准确率提升至97%

4.3 变更分类与审批权限

不是所有变更都要上CCB。按影响程度分级审批:

变更级别影响审批人
A级(重大)影响基线、影响进度>5天、影响合同CCB(含客户)
B级(中等)影响多个模块、影响进度1-5天PM + 技术负责人
C级(轻微)单模块内修改、不影响进度模块负责人

这个分级机制可以大幅减少CCB会议频率。C级变更日常处理,B级周报中同步,A级才正式开会。


五、配置审计

5.1 为什么要做配置审计

配置审计是CMMI CM的SG3目标,核心目的是验证配置项的实际状态与记录是否一致

不做审计的常见后果:

  • 基线清单上写着v1.0.0,实际仓库里commit已经偷偷往前走了
  • 文档说有5个微服务,实际代码库里只有4个
  • 交付的固件版本跟测试版本不一致

5.2 两种配置审计

功能配置审计(FCA):验证配置项的功能是否符合需求

  • 实际运行固件v0.3.1,检查功能是否与需求文档一致
  • 运行APK v1.0.0,验证所有需求功能点是否实现

物理配置审计(PCA):验证配置项的物理状态是否与基线清单一致

  • 基线清单上的每个配置项是否都存在
  • 版本号是否匹配
  • 哈希值是否一致

5.3 审计执行建议

小微企业建议在每个里程碑前做一次配置审计,检查清单:

  • 所有配置项是否都在版本控制中
  • 基线清单上的版本号与实际是否一致
  • 固件/APK/模型的哈希值是否匹配
  • 文档与代码是否同步(API文档与接口实现是否一致)
  • 是否有未关闭的变更申请
  • 分支策略是否执行到位

审计发现问题要记录到配置审计报告中,跟踪闭环。


六、Git + GitLab配置管理落地实践

6.1 分支策略:简化版Git Flow

小微企业不需要完整的Git Flow,用简化版三分支模型就够了:

main ──●──────●──────●──────●──→ (生产环境,只合并Release) ↑ ↑ release ──●──────●──────●──→ (测试环境,Sprint结束合并) ↑ ↑ develop ──●──●──●──●──●──●──→ (开发环境,日常开发) ↑ ↑ feature ──●──● (功能分支,开发完合并回develop)

分支用途

分支用途谁来合并
main生产环境代码,每次合并打TagPM/技术负责人
release测试环境代码,Sprint结束时从develop合并PM
develop日常开发集成分支开发人员
feature/*功能开发分支,命名如feature/user-login开发人员
hotfix/*生产环境紧急修复,从main拉出,修完合并回main和develop开发人员

6.2 Tag管理

每次发布正式版本必须打Tag,Tag命名规范:

REL-{版本号} 如 REL-1.0.0, REL-1.1.0 REL-{版本号}-RC 如 REL-1.0.0-RC1 (候选发布版)

打Tag的操作:

gitcheckout maingittag-aREL-1.0.0-m"正式版本1.0.0发布"gitpush origin REL-1.0.0

Tag是基线的代码层面落地。基线清单中"源代码"那一行的版本号,对应的就是Git Tag。

6.3 制品库管理:固件和APK怎么管

代码在Git里管,但固件(.bin)、APK、AI模型这些二进制制品不适合放Git(体积大、diff无意义),需要用制品库管理。

方案一:Nexus/Artifactory(推荐)

  • 搭建Nexus私服,按类型建仓库
  • 固件/APK上传到raw仓库,按版本号管理
  • CI/CD流水线自动上传构建产物

方案二:对象存储(OSS/MinIO)(轻量方案)

  • 按目录结构存储:/releases/v1.0.0/apk//releases/v1.0.0/firmware/
  • 用版本号目录区分,保留每个版本的制品
  • 上传时计算MD5,写入基线清单

6.4 CI/CD与配置管理的结合

CI/CD流水线是配置管理的自动化执行者。建议配置以下流水线:

代码提交 → 自动构建 → 单元测试 → 打包 → 上传制品库 → 通知 ↓ 自动打Tag(仅release分支)

GitLab CI 示例配置(.gitlab-ci.yml 关键片段):

stages:-build-test-package-releasebuild:stage:buildscript:-mvn clean compileonly:-develop-releasepackage:stage:packagescript:-mvn package-DskipTests-docker build-t vend-backend:$CI_COMMIT_SHORT_SHA .artifacts:paths:-target/*.jarrelease:stage:releasescript:-docker tag vend-backend:$CI_COMMIT_SHORT_SHA vend-backend:$CI_COMMIT_TAG-docker push registry.example.com/vend-backend:$CI_COMMIT_TAGonly:-tags

CI/CD的核心价值不是自动化构建,而是保证每次构建的可重复性。同一个Tag的代码,无论谁、何时构建,结果必须一致。这就是配置管理中"基线完整性"的工程化保障。

6.5 多端配置项联动管理

三端项目(后端+安卓+小程序)的配置项有依赖关系,需要联动管理:

联动场景管理方式
后端API变更影响安卓和小程序API契约文档独立版本控制,三端引用同一版本
固件升级影响后端协议通信协议文档独立版本控制,固件和后端同步升级
AI模型更新影响安卓推理模型版本号在安卓端运行时校验,不兼容版本拒绝加载
数据库变更影响所有端数据库迁移脚本版本化,后端启动时自动检查并执行

实操建议:在项目根目录维护一个VERSION_MAP.md文件,记录每个基线下各端配置项的版本对应关系:

# Release 1.0.0 版本对应表 | 配置项 | 版本 | |--------|------| | 后端代码 | REL-1.0.0 | | 后端服务 | v1.0.0 | | 安卓APK | v1.0.0_build30 | | STM32固件 | v0.3.1 | | YOLO模型 | v2.1 | | 数据库 | migration_v1.0 | | 小程序 | v1.0.0 |

这张表就是版本对应关系的基线,出了问题先查这张表,快速定位是哪一端版本不对。


小结

配置管理是项目管理的"基础设施",做好了你感受不到它的存在,做不好处处踩坑。

核心要点回顾:

  • 配置项识别:代码、文档、固件、APK、模型、脚本全部纳入管理,命名规范统一
  • 基线建立:需求基线→设计基线→产品基线→发布基线,每层都有审批和Tag
  • 变更控制:分级审批(A/B/C),C级日常处理,A级上CCB
  • 配置审计:功能审计(FCA)+物理审计(PCA),每个里程碑前做一次
  • Git落地:简化版三分支模型 + Tag管理 + 制品库 + CI/CD自动化
  • 多端联动:API契约、通信协议、模型版本、数据库迁移脚本要跨端版本对齐
← 返回列表