分支管理规范及发布流程模版

0 阅读5分钟

分支管理定义

image.png

分支说明

核心原则:develop 和 master 两条主分支始终贯穿整个流程,禁止直接 commit 和 merge,必须通过 Pull Request 合入代码。

  • master 分支:该分支上的代码随时可以部署到生产环境
  • develop 分支:进行任何新开发的基础分支,并作为各个 feature 功能特性的集成分支
  • feature/xxx 分支:每个新功能都在独立的 feature/xxx 分支上进行开发,开发完成后合并到 develop 分支
  • release /x.y.z 分支:用于上线的准备工作和修改验收环境的 Bug,决不能包含需求变更或功能变更等重大修改
  • hotfix/xxx 分支:用于快速修复线上 Bug,在 master 分支上创建,修改后合并回 master 和 develop 分支

分支汇总

分支类型用途分支建立分支合并位置
master长期分支稳定版本项目初始本地,远程
develop长期分支开发版本项目初始本地,远程
feature/xxx短期分支新功能开发从 develop 建立开发完成合入 develop本地,远程
release/x.y.z短期分支预备发布从 develop 建立合并回 master 和 develop本地,远程
hotfix/xxx短期分支紧急 Bug 修复从 master 建立合并回 master 和 develop本地
support/xxx短期分支特殊版本从 master 建立一般不合并

分支使用注意事项

长期分支保护:develop 和 master 必须设置为 protected branch,杜绝直接 commit 和 merge 代码。

  • feature/xxx 分支,建议通过项目管理工具上的 Feature 来创建关联 Feature 分支
  • feature/xxx 分支粒度划分建议不超过一周,杜绝出现 long-lived-branches;每个 Sprint 结束删除原分支,重新拉取
  • feature/xxx 分支建议每日从 develop 分支 pull 一次代码,发起 Pull Request 前均需要 pull 一次
  • develop 分支上发现的阻塞问题,需半天内在 develop 分支上修复
  • release/x.y.z 分支的命名原则为 release/x.y.z,x.y.z 与发布版本号保持一致,由 Feature Master 来创建、合入、删除
  • 迭代验收后,release 代码及时回到 master 上

发布流程定义

image.png

环境与分支对应

环境名称功能说明分支说明
开发(DEV)开发自测feature/xxx开发人员日常开发调试
集成(SIT)API 测试 + UI 测试develop功能集成后的系统测试
验收(UAT)API 测试 + UI 测试 + 迭代验收release/x.y.z产品验收测试
预生产(STG)预生产验证/演示tag基于 master 打 Tag 部署
生产(PRD)正式生产tag基于 master 打 Tag 部署

发布流程步骤

  1. SIT 环境:从 feature 通过 Pull Request 到 develop 分支,进行 SIT 测试
  2. 上 UAT 环境:从 develop 通过 Pull Request 到 release 分支,进行 UAT 测试,产品负责人做迭代发布验收
  3. 上预生产/生产环境:从 release 发起 Pull Request 到 master 分支,测试验证通过后打 Tag 部署,进行冒烟测试,产品负责人做版本发布验收
  4. 灰度发布:用于生产上线前按照版本或地域实现流量切换验证

代码提交频率

分支频率要求
feature每天至少一次
develop2 天至少一次
release平均每周一次
master平均每个迭代(2 周)一次

验收分支定义

  • 迭代验收:release 分支,产品负责人验收
  • 版本 发布验收:master 分支,产品负责人验收

SDK 包管理规范

分支 约束:POM 文件中 artifact 的 version 取值,在研发测试阶段用 -SNAPSHOT 后缀,合入 master 分支时去除 -SNAPSHOT 后缀(Code Review 检查)。

SDK 版本号命名

Java 包(Maven) 版本 字符串major.minor.build-profile

  • major、minor、build 都是数字,profile 取两个值:SNAPSHOT、RELEASE
  • 大版本不兼容更新,升级 major(升级后 minor 和 build 回到 0)
  • 兼容性的功能增强,升级 minor(升级后 build 回到 0)
  • Bug 修复,RELEASE 版本必须升级 build,SNAPSHOT 版本可以不用升级 build

前端 ****JavaScript 包(npm) 版本 字符串major.minor.build

  • major、minor、build 都是数字不带 profile,数字升级规则与 Java 包的 RELEASE 一致

管理原则

  • Snapshot 依赖原则:提交 master 分支代码时,必须去除 pom.xml 中 snapshot 类型的依赖
  • Deploy 方式:snapshot 和 release 版本都要求通过 CI 流水线配置脚本实现,其中 release 版本要求拉取 master 分支 Tag 版本
  • 权限控制:Web 界面仅提供开发人员 View 权限;命令行允许开发人员执行 deploy 部署;三方库包需经审批上传;默认不允许覆盖或删除已 deploy 的文件

软件版本说明

版本号规则

版本号遵循 RX.Y.Z.B 规则:

字段含义说明
X重大增强类变更号注册版本
Y轻微增强类变更号M 版本号
Z纠正类变更号H 版本号
B构建变更号每次发布大版本后 +1

示例:R001.5.2.000001

版本包规则

软件版本号命名格式:{类型}-{产品模块名}-{MxHz}-RX.Y.Z.B-{日期}

字段说明
类型FULL(完整包)或 Hotfix(补丁包)
产品模块名对应产品模块标识
MxHz版本号(如 M8H1)
RX.Y.Z.B详细版本号
日期构建日期(YYYYMMDD)

Tag 命名规范

与软件包命名规则类似,移除包类型及产品名:RX.Y.Z.B-{日期}

注意:针对 Tag 出包该处为 Tag 号,若为分支出包则由流水线管道自动生成。


Hotfix 管理

Hotfix 用于紧急修复生产环境问题,需严格控制范围,仅包含 Bug 修复,不得引入功能变更。

  • 完整包命名:FULL-{模块名}-MxHz-RX.Y.Z.B-{日期}.tar.gz/exe
  • 补丁包命名:Hotfix-{模块名}-MxHz-RX.Y.Z.B-{日期}.tar.gz/exe
  • 部署脚本及说明文档放压缩包根路径下