当前位置: 首页 > news >正文

04-无人售货柜多端分支策略:后端微服务、安卓固件、小程序独立分支管理

04-无人售货柜多端分支策略:后端微服务、安卓固件、小程序独立分支管理

一、三端为什么要独立分支管理?

上一篇讲了通用的Git Flow分支模型。但落到无人售货柜这种多端项目上,有一个绕不开的问题:三端的代码仓库都不在一起,发版节奏也不同,怎么协调?

先看三端的基本情况:

维度SaaS后端安卓工控固件微信小程序
技术栈SpringCloud + Java安卓 + Kotlin/C++微信小程序 + TypeScript
仓库vending-backendvending-firmwarevending-miniapp
发布周期每两周每月(OTA推包)随时(审核1-2天)
回滚成本低(灰度切流)高(重新打包推包)中(重新提交审核)
依赖关系提供API契约消费后端API消费后端API

三端各自独立仓库,如果各管各的分支,不做版本对齐,就回到了第1篇讲的"版本冲突血案"——后端API变了,安卓固件不知道。

核心思路是:三端各自遵循Git Flow模型,但通过版本号对齐机制和跨端联调协议来协调。

二、三端独立仓库的分支模型

2.1 后端微服务仓库:vending-backend

后端是API的"契约提供方",分支模型最严格:

master ●─────●─────●─────●─────● (Tag: v1.0.0 → v1.1.0 → v1.2.0) \ ↑ / ↑ / develop ●●●●●●●●●●●●●●●●●●●●●●●●●●● \ ↑ / ↑ / feature ●●●●●●● ●●●●●●● ↑ release ●●●●●●● (release/v1.2.0)

后端关键规则:

  • API变更必须走Feature分支,且在Feature分支中同步更新接口文档(Swagger/OpenAPI)
  • Release分支创建时通知安卓固件和小程序团队,附带接口变更清单
  • Master每次合并打Tag,格式v{major}.{minor}.{patch}-backend

2.2 安卓工控固件仓库:vending-firmware

固件端是"协议消费者",分支模型需要适配OTA推包的特殊性:

master ●─────●─────●─────● (Tag: v1.0.0-firmware → v1.1.0-firmware) \ ↑ / ↑ develop ●●●●●●●●●●●●●●●●●●●● \ ↑ / feature ●●●●●●● \ ↑ / hotfix ●●●●●●● (紧急修复,从master拉出)

固件端关键规则:

  • 固件版本号与后端API版本号绑定,Tag格式v{major}.{minor}.{patch}-firmware,其中major版本与后端API大版本一致
  • 固件Release分支必须基于后端已发布或已进入Release阶段的对应API版本
  • 额外维护一个hotfix分支通道,因为固件Bug往往需要紧急OTA推包,不能等下个迭代

2.3 微信小程序仓库:vending-miniapp

小程序相对灵活,但也要遵循规范:

master ●─────●─────●─────● (Tag: v1.0.0-miniapp → v1.1.0-miniapp) \ ↑ / ↑ develop ●●●●●●●●●●●●●●●●●●●● \ ↑ / feature ●●●●●●●

小程序关键规则:

  • 小程序发布走微信审核,不能像后端那样灰度,所以Release分支的测试必须更充分
  • 小程序的API调用层做版本号协商:小程序启动时请求后端/api/version接口,获取后端当前版本号,如果版本不兼容则提示用户更新小程序

三、版本对齐机制:三端怎么"对表"?

分支模型解决的是单端内部的管理问题,版本对齐解决的是跨端的协议匹配问题

3.1 接口契约文件统一管理

在后端仓库中维护一份接口契约文件(推荐OpenAPI/Swagger格式),路径docs/api-contract.yaml

openapi:3.0.0info:title:无人售货柜APIversion:1.2.0paths:/api/v1/door/open:post:summary:开门接口requestBody:content:application/json:schema:type:objectproperties:cabinet_id:type:stringdescription:货柜编号responses:'200':description:成功content:application/json:schema:type:objectproperties:code:type:integerdata:type:objectproperties:door_id:type:stringdoor_status:type:stringenum:[opened,closed]open_time:type:integerdescription:开门时间戳

这份文件就是三端的"契约"。后端每次接口变更,修改这份文件,commit message中标注[API-CONTRACT]前缀。安卓固件和小程序团队通过CI流水线自动拉取这份文件,生成各端的API客户端代码。

3.2 版本号三段式对齐

采用主版本.次版本.修订版本的三段式版本号,三端各自维护但主版本号保持一致:

v1.2.0-backend → 后端v1.2.0正式版 v1.2.0-firmware → 适配后端v1.2.0的固件版本 v1.2.0-miniapp → 适配后端v1.2.0的小程序版本
  • 主版本(major):API发生不兼容变更时升级,如/api/v1/变成/api/v2/,三端必须同步升级
  • 次版本(minor):新增功能但向下兼容,后端先升级,固件和小程序按需跟进
  • 修订版本(patch):Bug修复,各端独立升级即可

3.3 版本对齐检查清单

每次后端Release分支创建时,执行版本对齐检查:

检查项负责人状态
接口契约文件已更新后端
接口变更清单已通知固件和小程序后端
固件已拉取最新契约并完成适配固件
小程序已拉取最新契约并完成适配小程序
三端联调环境部署完成运维
联调测试用例全部通过测试

四、跨端联调的分支协调方案

4.1 联调环境与分支映射

联调环境固定使用三端的Develop分支部署:

环境后端固件小程序
dev(日常联调)develop分支develop分支develop分支
staging(预发布)release分支release分支release分支
prod(生产)master + Tagmaster + Tagmaster + Tag

联调环境通过Docker Compose编排,一键拉起后端服务+模拟固件环境+Mock小程序,开发者本地即可联调。

4.2 跨端联调的标准流程

以一次接口变更为例:

第1步:后端创建feature/door-api-field-refactor分支 修改接口实现 + 更新api-contract.yaml 推送到远程 第2步:后端通知固件和小程序(通过MR Comment或企业微信通知) 附带接口变更说明和契约文件diff 第3步:固件拉取最新api-contract.yaml 基于develop拉出feature/firmware-door-api-adapt分支 使用Swagger Codegen生成新的API客户端代码 适配新字段 第4步:小程序同理拉出feature/miniapp-door-api-adapt分支 适配新接口 第5步:三个Feature分支同时合并到各自的develop分支 CI自动部署dev联调环境 第6步:三端在dev环境联调 后端调接口 → 固件解析返回值 → 小程序展示状态 联调通过后各自进入Release流程

4.3 紧急修复的跨端协调

线上出Bug需要紧急修复时,流程如下:

后端从master拉bugfix分支 → 修复 → 合并master打Tag v1.2.1-backend ↓ 判断是否影响固件/小程序 ↓ ┌─── 是 ───┐ ┌─── 否 ───┐ ↓ ↓ ↓ ↓ 固件拉bugfix 小程序拉bugfix 仅后端发版 合并master 合并master 通知两端 Tag v1.2.1 Tag v1.2.1 无需动作 -firmware -miniapp

关键原则:后端紧急修复后,必须评估是否影响下游端。如果接口返回值变了,固件和小程序必须同步修复;如果只是后端内部逻辑修复(如数据库SQL优化),不影响接口,则通知两端即可。

五、实战:完整一次三端发版的全流程

以v1.3.0版本发布为例,完整走一遍:

【W1 周一】迭代规划 - 后端:新增商品识别结果上报接口 - 固件:对接YOLO识别结果,调用新接口上报 - 小程序:商品识别结果展示页面 【W1-W2】各端开发 后端: feature/product-recognize-api (vending-backend仓库) 固件: feature/yolo-result-report (vending-firmware仓库) 小程序: feature/recognize-result-display (vending-miniapp仓库) 后端更新api-contract.yaml,通知两端 【W2 周四】Feature合并到Develop 三端各自合并到develop分支 CI自动部署dev环境,三端联调 【W2 周五】联调修复 发现固件上报的图片格式和后端预期不一致 固件在develop上直接修复(小改动),重新联调通过 【W3 周一】创建Release分支 三端各自从develop拉出release/v1.3.0 后端: release/v1.3.0 (vending-backend) 固件: release/v1.3.0 (vending-firmware) 小程序: release/v1.3.0 (vending-miniapp) 【W3 周二-周三】回归测试 测试团队在staging环境(Release分支部署)做全量回归 小程序提交微信审核(利用审核等待期做最终确认) 【W3 周四】发版 三端Release分支合并到master 打Tag: v1.3.0-backend / v1.3.0-firmware / v1.3.0-miniapp 后端灰度发布,固件OTA灰度推包(先推10台货柜) 小程序微信审核通过后发布 【W3 周五】版本对齐确认 确认线上三端版本号一致: v1.3.0 删除所有Release和Feature分支 开始下一迭代规划

六、总结:多端分支管理的核心原则

回顾整个方案,核心原则就三条:

  1. 各自独立、统一模型:三端各自仓库,但都遵循Git Flow分支模型,保证单端内部的规范
  2. 契约驱动、版本对齐:用接口契约文件做三端的"协议纽带",用版本号做"对表基准"
  3. 流程兜底、工具保障:版本对齐检查清单 + CI自动化部署 + 灰度发布策略,用流程和工具代替人工提醒

这套方案不是理论模型,是我们在无人售货柜项目实战中反复打磨出来的。刚开始会觉得流程"重",但一旦团队磨合到位,你会发现——版本冲突这种事,再也不用靠"谁记得通知谁"了,流程会替你兜住。

http://www.jsqmd.com/news/1377904/

相关文章:

  • 电机过载、缺相保护,自锁、时控线路
  • Kafka快速入门与实战:从核心概念到生产环境部署
  • UE5数字孪生实战:Web Browser插件适配与车辆运动逻辑优化
  • 9大网盘直链解析工具:免费获取真实下载地址的终极指南
  • 2026进口高低压元器件采购周期太长,国内有哪些品牌能提供现货或快速定制?
  • 【2026-08】配重铁砂混凝土优秀加工厂哪个好?配重混凝土、铁砂混凝土容重甄选——可耐可特 - 多才菠萝
  • ROS机器人开发入门:核心概念、工具链与学习路径全解析
  • Ubuntu服务器双网卡NAT与桥接共存配置实战
  • CUTTag与RNA-seq多组学关联分析:5大实用套路与工程实践
  • JS逆向攻防实战:反调试、代码混淆与AST加密的对抗技术
  • 外文人工翻译平台测评:平台体验 - 逢君学术-AI论文写作
  • 前端跨标签页状态同步:三层架构解决多Tab聊天鬼打墙
  • 终极SoundCloud音乐下载器完整指南:从零开始构建你的离线音乐库
  • LoongForge优化实战:将大型视觉-语言模型训练吞吐提升2.3倍
  • Hive SQL字符串匹配:LIKE、RLIKE与REGEXP核心区别与实战指南
  • 【2026-08】铁砂混凝土优秀公司选哪个?钢箱梁铁砂混凝土、钢渣混凝土优选——可耐可特 - 多才菠萝
  • 响应时间(Response Time, RT)是衡量系统性能的关键指标之一,表示从客户端发出请求开始,到接收到完整响应为止所经历的总耗时
  • Coze平台一站式AI Bot开发:从零构建智能会议助手并集成飞书微信
  • 分布式链路追踪Java实战11
  • 5分钟掌握OpenSpeedy:让你的Windows游戏体验提升300%的开源加速神器
  • 为AI助手添加视频理解能力:FFmpeg与Whisper本地部署实战
  • Unity书本翻页效果全解析:从插件使用到自定义Shader实现
  • 投票链接被微信拦截怎么办?使用云众评选降低风险 - 微信投票小程序
  • PUBG压枪宏终极方案:罗技鼠标如何帮你告别后坐力烦恼?
  • C++ unordered_map与map深度对比:哈希表原理、性能调优与实战选型指南
  • Cocos Creator多语言插件开发:从数据驱动到组件化实战
  • 万字拆解 BabyAGI 认知架构:从100行Python到自主智能体的底层逻辑
  • VC6.0部署与开发实战:从环境搭建到MFC应用
  • AI PC异构计算新范式:解析NVIDIA RTX Spark与联发科SoC的协同架构
  • 05-Git常用高阶操作:reset/rebase/cherry-pick/merge冲突解决