中后台前端分支管理

中后台分支和环境管理规范

概览

分支&环境&环境分支

环境及环境分支

环境分支只用于触发CI&CD部署的分支,可随时被删除及从master重建;环境分支在使用前,或者在release后自动删除。

alpha: 指代测试环境,是一个功能提测试阶段的测试环境,对应功能测试环境分支,如:环境分支alpha/app-xxx对应功能开发分支feature/app-xxx的测试、组件相关的环境分支alpha/com-xxx => 组件功能开发分支feature/com-xxx;

beta: 稳定完整的测试环境,是功能测试后合到develop稳定的功能集合,在beta阶段需要回归,防止期间有测完的功能没有及时合并导致冲突,对应develop分支;

pre: 指代预发环境,是一个等同于线上的一个稳定环境,集合了现有将要发布到正式online环境的稳定功能,主要针对当前release版本在正式环境的接口下功能的预检,对应master分支,有并行的功能应做好入口开关,保证其他功能正常上线,或使用不同的release start后的包逐个预发验证后再release finish。

online: 指代线上正式环境,发布包来源master,即release/app-xxx-1.x.x或hotfix/app-xxx-fix-xxx finish后,push master触发CI打包产物,已经在pre上得到开发和需求方充分验证

git flow工作流程

环境及环境分支以外尊崇 git flow工作流程 ,除了master和develop是永久分支外,其他的分支都可以随时删除重建

master: 只能用来包括产品代码。你不能直接工作在这个 master 分支上,而是在其他指定的,独立的特性分支中(这方面我们会马上谈到)。不直接提交改动到 master 分支上也是很多工作流程的一个共同的规则。

develop: 是你进行任何新的开发的基础分支。当你开始一个新的功能分支时,它将是_开发_的基础。另外,该分支也汇集所有已经完成的功能,并等待被整合到 master 分支中。
feature/app-xxx-yyy@zzz: 从develop检出。feature/表示功能分支,xxx描述子产品,yyy描述迭代功能(新项目则不指定),@zzz多人开发一个feature时可使用;同理feature/com-xxx-yyy@zzz代表组件,即xxx描述组件;

release/app-xxx-1.x.x: 从develop执行git flow release start app-xxx-1.x.x生成,在整理或修改版本相关信息后,push远程触发CI&CD到pre和online环境,检查完后执行git flow release finish app-xxx-1.x.x合并到master和develop。1.x.x表示当前app-xxx的版本,其他同上;

hotfix/app-xxx-aaa: 从master执行git flow hotfix start app-xxx-yyy生成,处理完, aaa表示fix的内容的描述,其他同上。

开发流程

feature流程

即拿到需求开发一个新的app或者在现有app上迭代功能

  1. 创建功能分支,执行
# 新项目为 git flow feature start app-ci,即app-xxx
git flow feature start app-ci-pipeline

# Switched to a new branch 'feature/app-ci-pipeline'

# Summary of actions:
# - A new branch 'feature/app-ci-pipeline' was created, based on 'develop'
# - You are now on branch 'feature/app-ci-pipeline'

# Now, start committing on your feature. When done, use:

#      git flow feature finish app-ci-pipeline

feature start后将会基于develop创建新功能分支 feature/app-ci-pipeline,并切自动换到 app-ci-pipeline 分支,开始相应功能开发;

  1. 相应功能开发完或部分开发完后需要提测,将当前功能分支 feature/app-ci-pipeline 合并到产品对应环境分支alpha/app-ci(如果新项目需要创建环境分支alpha/app-ci并配置触发CI&CD),等待Auto CI&CD打包部署完后到alpha环境下访问对应产品进行测试;

  2. 当前功能充分测试完成后,做发布前准备,集成测试,执行

# 新项目为 git flow feature finish app-ci,即app-xxx
git flow feature finish app-ci-pipeline

# Switched to branch 'develop'
# Already up to date.
# Deleted branch feature/app-ci-pipeline (was 5089ac8).

# Summary of actions:
# - The feature branch 'feature/app-ci-pipeline' was merged into 'develop'
# - Feature branch 'feature/app-ci-pipeline' has been locally deleted
# - You are now on branch 'develop'

feature finish执行完后当前功能分支feature/app-ci-pipeline被合并到develop,触发beta环境的CI&CD,在beta集合了现阶段准备上线的所有功能,是一个相对稳定的线下测试环境,在这个环境下回归自己的功能是否影响或被影响其他功能。

  1. beta回归完后,执行
git flow release start app-ci-pipeline-1.0.0

# Switched to a new branch 'release/app-ci-pipeline-1.0.0'

# Summary of actions:
# - A new branch 'release/app-ci-pipeline-1.0.0' was created, based on 'develop'
# - You are now on branch 'release/app-ci-pipeline-1.0.0'

# Follow-up actions:
# - Bump the version number now!
# - Start committing last-minute fixes in preparing your release
# - When done, run:

#      git flow release finish 'app-ci-pipeline-1.0.0'

release start后创建并切换到了release/app-ci-pipeline分支,我们可以编辑一些版本号或者release changelog等

  1. 然后结束release流程,执行
git flow release finish app-ci-pipeline-1.0.0

# Switched to branch 'master'
# Deleted branch release/app-ci-pipeline-1.0.0 (was 5089ac8).

# Summary of actions:
# - Release branch 'release/app-ci-pipeline-1.0.0' has been merged into 'master'
# - The release was tagged 'sre-release-app-ci-pipeline-1.0.0'
# - Release branch 'release/app-ci-pipeline-1.0.0' has been locally deleted
# - You are now on branch 'master'

release finish执行完后relealse代码被合并到master和develop,没有更改的会被忽略。

  1. 手动或自动推送master到远程,触发CI&CD部署到pre预发环境,这个阶段需要检查预发下发布包是否正常,拉上需求方一起检查在线上接口数据下功能是否正常。

  2. 将6构建好的包发起上线单,发送正式环境部署通告,部署到生产环境,让需求放一起double check,完成一次正式环境发布。

通告模板: 这里预发和正式环境都需要发送通告,随着并行项目和开发人员越来越多,可能会把别人在预发的功能带上去,所以提前通告及处理

【上线通告】
模块:前端app-ci模块
环境:正式/预发
变更:ci下pipeline和产品库新功能发布 @相关人员
上下游影响:本次改动没有其他关联app
进度:0%

回复
进度 50%

回复
进度 100%

回复
进度 检查无误

hotfix流程

当遇到线上问题需要紧急修复的时候

a. 如app-ci下产品模块的样式问题,执行

git flow hotfix start app-ci-product-style
# Switched to a new branch 'hotfix/app-ci-product-style'

# Summary of actions:
# - A new branch 'hotfix/app-ci-product-style' was created, based on 'master'
# - You are now on branch 'hotfix/app-ci-product-style'

# Follow-up actions:
# - Start committing your hot fixes
# - Bump the version number now!
# - When done, run:

#      git flow hotfix finish 'app-ci-product-style'

执行后会生成并自动切换到hotfix/app-ci-product-style分支,修复问题,期间有不确定的不会限制太死,可以合到对应alpha/app-ci分支测试,时间宽裕的作为功能迭代feature,走feature流程亦可(理论上不存在特别紧急的hotfix,线上问题,根据稳定性原则上线引起的第一步回滚及通报,第二步修复再发布);

b. 修复完后执行

git flow hotfix finish app-ci-product-style
# Switched to branch 'develop'
# Merge made by the 'recursive' strategy.
#  bb.html | 0
#  1 file changed, 0 insertions(+), 0 deletions(-)
#  create mode 100644 bb.html
# Deleted branch hotfix/app-ci-product-style (was a9f2b71).

# Summary of actions:
# - Hotfix branch 'hotfix/app-ci-product-style' has been merged into 'master'
# - The hotfix was tagged 'sre-release-app-ci-product-style'
# - Hotfix tag 'sre-release-app-ci-product-style' has been back-merged into 'develop'
# - Hotfix branch 'hotfix/app-ci-product-style' has been locally deleted
# - You are now on branch 'develop'

hotfix finish后会自动合并到develop和master分支。

c. 同feature流程6;

d. 同feature流程7

code review

develop 和 master分支是锁定的,只能通过merge request的方式合并,因此在上面的流程中,在往develop和master远程推送代码的时候回被阻断,改用发起merge request,并且找到另一个同学一起code review,review中的问题修复后才可merge。