本文讨论业务接触到的git发布流程,在此记录和分享。
欢迎讨论和吐槽。
方案1
这是在我第一家公司的经验,刚开始我们团队的发布系统是内部的发布系统,而后使用的是jenkins发布。
以下流程为文字描述,希望可以描述清楚。
公司开发分本地,测试,预发,线上环境,相应的项目有master,develop,test远程分支。
- 本地pull develop和test分支,在develop分支上切出a分支进行功能开发,在本地环境测试;
- 本测试完毕,更新本地test分支,将a分支合并到test,推送远端,然后放到测试环境(这样可以满足多个开发在同一个测试环境测试);
- 测试环境测试ok,更新本地develop,合并a分支(有冲突合作解决冲突),推送,然后发到预发环境测试。
预发环境测完后发布上线(用的master分支,开发只有推送远端develop的权限,合并master只有权限更高的人可操作)。
方案2
这是我第二家公司了解的发布流程。
同样,公司分本地,测试,预发,线上环境,项目有master,develop分支远程分支。开发a拥有远端a分支,用户本地开发,本地测试。
- 本地测试完成,代码合并推送远端a分支,a拥有自己的测试环境,a分支代码如测试环境1测试,和别人的并行功能互不影响;
- 测试环境测试完毕,a代码合并入预发,简单验证后上线。此时可能会同时两个人需要发预发,但是到这一步因流程较快,进行串行操作,a验证完了b才能合进来验证;
- 预发确认完毕,上线。
分析
两种方案都解决了一定的问题,也都还存在瑕疵。
前者开发发布不受别人影响可以在统一环境测试,但是因为在同一环境,测试中还是可能有问题;
后者发布测试环境独立,但是预发环境串行可能效率存在问题,而且后一个人的代码和前一个人没有一起在测试环境验证,到了预发合并后,可能存在问题(对前者)。