分支开发,主干发布
采用“分支开发,主干发布”的方式进行软件开发。
- Master 分支
Master 分支是反映生产环境系统版本状态的固定分支,作为新需求开发和线上问题修复的基础。预发和生产环境的代码只能来自于 Master 分支,确保生产系统的稳定性和一致性。 - Release 分支
Release 分支用于反映生产系统的即将发布状态。它作为灰度环境的部署基础,允许代码在灰度环境中进行最后的验证。Release 分支的代码最终会合并到 Master 分支,确保生产版本的更新。 - Feature 分支
Feature 分支是开发新需求的临时分支。研发人员会在这个分支上进行功能开发和测试。开发和测试完成后,Feature 分支的代码需要通过代码评审,并最终合并到 Master 分支以完成上线发布。上线发布完成后,Feature 分支会在保留一段时间后归档或删除。 - Hotfix 分支
Hotfix 分支用于紧急修复线上问题的临时分支。研发人员将在该分支上进行修复和测试。修复完成后,代码会合并到 Master 分支进行上线发布。修复发布完成后,Hotfix 分支也将保留一段时间后进行归档或删除。
主流程描述
- 需求分支创建
研发接需求后,从master分支拉取需求对应的feature分支。 - 开发阶段
开发过程中,必要时将master分支合并到feature分支。 - 开发完成
开发完成后,研发同步master分支,准备提测。 - 提测阶段(功能测试)
研发提测,将feature分支合并至test分支,并将test分支部署到测试环境。测试人员进行功能测试,确认是否符合需求,查找并修复bug。 - 代码评审(在功能测试通过后)
功能测试通过后,研发同步最新master分支代码,提MR进行代码评审,评审通过后,合并代码到release分支。 - 灰度环境(UAT)测试
研发将release分支部署到灰度环境(UAT),进行回归测试和灰度验证。 - 回归测试通过后
回归测试通过后,再次同步最新master分支代码,将release分支合并到master分支,将master分支部署到生产环境。 - 完成任务
确认生产环境稳定无问题后,结束本次开发流程。
如图所示:
比较直观:
命名规范
分支命名
<类型>_<任务号>
类型
feature
hotfix
任务号
JIRA单号
示例
feature分支
feature_CO-xxx,feature_SO-xxx
hotfix分支
hotfix_CO-xxx, hotfix_SO-xxx
release分支(根据当天日期作为tag)
release_20241008_1 (版本有变动,则最后的数字是版本号,递增)
特殊情况(集成分支作为功能分支)
feature_CO-xxxx_CO-xxxx
分支合并
渠道
MR审批权限
前置卡点
操作时机
feature_CO-xxx–>test1
将feature_xx-xxx分支合并到test1(test2,test3,test…) 固定分支
测试团队
- 研发自测冒烟通过
代码提测
feature–>release_xxxx_x
通过MR将feature分支代码合并到release_xxxx_x分支
团队负责人
核心员工
- feature分支CI成功
- 完成功能测试和自动化回归
- 完成安全审核和扫描
- 进行代码评审
- 完成验收
代码发布灰度环境(UAT)
release_xxxx_x --> master
将release_xxxx_x分支合并到master分支
- feature分支CI成功
- 完成回归测试和自动化回归
- 完成验收
代码发布生产环境
(PRD)
hotfix–>master
通过MR将hotfix分支代码合并到release_xxxx_x分支,
将release_xxxx_x分支合并到master分支
团队负责人
核心员工
- hotfix分支CI成功
- 进行代码评审
- 完成功能测试和自动化回归
- 完成安全审核和扫描
- 完成验收
代码上线发布前
master→feature | hotfix | release_xxxx_x
通过研发本地环境合并master分支并提交
无 - master分支CI成功
- master分支无发布
- 日常同步master
- 功能测试前
- 自动化回归前
- 代码合并master前
分支和release_xxxx_x清理
清理规则:
1、分支数>10且最后活动时间超过1个月的分支
2、release_xxxx_x数>10且最后活动时间超过2周的release_xxxx_x