主干发布和分支发布

一:主干发布

先说主干发布模式: 以SVN库为例,大致将库分为trunk, branch,tag三种,主线发布就是公司要发布某个产品的V1版本,之前大家都做会在SVN的trunk上做开发,等 trunk稳定了.开出一个分支B1,在B1分支上做V1版本的其它功能添加,bug修改等,并使用持续集成来验证B1的稳定性.直到V1版本达到要求, 可以对外发布,并且发布成功后,进行从branch到trunk的merge操作,此时trunk上的内容变成了V1版本的内容,而后trunk上的内容不再允许修改.然后,再发布V2,这个时候,比如下一个版本要发布V2版,这时从trunk的V1版发布的那个点,开一个分支B2出来,再进行V2版的开发,并做持续集成验证V2版的稳定性.直到V2版也达到要求,并且对外发布以后,将B2merge到trunk上,此时的trunk上的内容又变成了V2 版本的内容. 依次类推, 直到V3,V4,V5等.我们称这种发布模式为主干发布,因为主干上的东西永远都是发布后的产品, 而且不允许修改.

如下图:

如果按照这种方式发布的优点:

第一:可以随时保证trunk上的东西的稳定性,使trunk随时可用;

第二:大部分开发人员不会去触碰trunk,用分支的方式解决实际开发过程中的一些变更(需求变更或设计变更等);

第三:可以从trunk上随时拿到已发布的任意一个版本。

如果按照这种方式发布存在的不足:

第一:开发的时候, 持续集成一直在验证着Branch上的稳定性和正确性,而对于release完成后merge到trunk上后, 没有对trunk进行集成验证, 难以保证trunk的稳定性;

第二:违背了SVN的规范,把trunk库当成了tag库去使用;

第三:某些开源项目会采用这种开发(发布)模式,但其中对于验证要求非常严格,merge起来很费时,鉴于开源项目的特殊性,暂不做讨论;

第四:一般采用这种模式发布,是有自己的考虑在里面的。那就是trunk上的东西是不能损坏的,必须随时是好的,即使偶尔出现问题也能及时修正,但trunk已经完全失去了它做为主干的意义,也很难保证SVN库的一致性。

二:分支发布

再说分支发布模式:以SVN库为例,大致将库分为trunk, branch, tag三种,所有开发人员基于trunk进行开发,比如也是要发布V1版本的产品,到trunk上的内容稳定后,版本达到了要release的要求,这时从trunk上开分支出来,我们可以称这个B1分支上的内容为pre- release版,此时这个B1分支只为fixbug, 除非有必须要加的新功能.这个时候呢,大部分的开发人员就可以在trunk上开发下一次的发布, 而只需要少部分开发人员基于B1分支fix bug.如果有bug需要在B1和trunk里面都fix的话,就会有少量的merge操作,如非必要,就省心了. B1分支开出来后,一旦release了,可以根据发布计划,选择是否需要保留.如果近期有发B1的update计划,则可以保留;如果近期都不会再有基于B1的开发,可以将V1发布这一时刻点的B1状态通过tag的方式记录下来,然后消亡B1分支.我们称这种模式为分支发布,因为分支才是发布的线,主干可以一直进行开发,而没有必要停止.

如下图:

如果按照这种方式发布的优点:

第一:trunk做为开发主线,开发人员可以随时将自己符合要求的代码提交到trunk上,如果在没有必要的条件下,不开分支。同时对trunk做持续集成验证,最大程度上保证trunk的稳定性。

第二:对每次成功的持续集成都同时对库和集成环境做tag操作,发挥tag库的强大作用。

第三:最大量的减少了merge操作,降低了误差。一旦要发布产品,只需从一个稳定的版本(公司上层同意的)发一个分支出来,然后再投入少量的开发人员去进一步优化,主要是fixbug。而这时,大部分开发人员就可以投入到下一个版本的开发中,最大力度的使用人力资源。

第四:其它.

如果按照这种方式发布存在的不足:

第一:配置管理需要随时了解pre-release的分支是否需要保留,以为下一次发布update等做准备。

第二:如果有大型的变更,trunk可能会被破坏,但是如果有一套规范,可以把风险降到最低。(或者也可以通过开分支的方式来解决这种问题)

第三:如果想要真正发挥这种发布模式的威力,配置管理,变更管理,持续集成,质量管理,发布管理每一个模块都是不可少的。

转自:http://blog.sina.com.cn/s/blog_5eb1a2670100ewcs.html

时间: 2024-10-08 19:23:40

主干发布和分支发布的相关文章

主干(trunk)、分支(branch )、标记(tag)

主干(trunk).分支(branch ).标记(tag) 用法示例 + 图解 以svn为例,git的master相当于trunk,dev分支相当于branches -------------------------------------------------------------------------------------------------------------------------------------------- trunk:是用来做主方向开发的一直向前进行,一个新

SVN 主干(trunk)、分支(branch )、标记(tag)

主干(trunk).分支(branch ).标记(tag) 在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆. 在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别.至于何时用tag,何时用branch,完全由人主观的根据规范和需要来选择,而不是强制的(比如cvs). 一般情况下, trunk:是用来做主方向开发的,一个新模块的开发,这个时候就放在trunk,当模块开发完成后,需要修改,就用branch. branch

互联网产品发布之灰度发布

1. 为什么要灰度发布 互联网服务变动频繁,发布周期短.速度与质量总是难以双全. 灰度发布能降低发布风险,减少影响范围. 降低对测试的依赖,减少线下自测的数据构造成本. 方便集中监控日志,全量发布由于各层负载均衡的作用,很难跟踪一条完整的调用链路. 可以灰度测试帐号,测试账户通过之后再灰度真实用户帐号,进一步降低发布的风险和影响. 方便回滚. 不能靠灰度发布解决的问题 需要强调的是:上文所说的“可以容忍的影响”必须是可恢复的,比如API无法调用一段时间,但是修复之后,就可以成功调用.而永久性地丢

【原创】我所理解的自动更新-APP发布与后台发布

发布后台 创建渠道:添加新的渠道,设置渠道名称,自动生成渠道id.    查看渠道:查看渠道基本信息,渠道app版本号,资源版本号,是否开启更新.    创建/更新APP:选择打包ios,android版本,设置渠道所属,设置版本日志,发送消息到APP Publish并等待反馈.    创建/更新资源:设置渠道所属,设置版本日志,发送消息到ResPackageTool并等待反馈. APP打包发布 从VersionServer里获取相应渠道的代码,保存到目录[channel-渠道号-版本号]. 

【微服务从入门到精通】:(一)微服务的蓝绿发布及灰度发布

蓝绿部署 基本上,蓝绿部署是一种以可预测的方式发布应用的技术,目的是减少发布过程中服务停止的时间. 简单来说,你需要准备两个相同的环境(基础架构),在蓝色环境运行当前生产环境中的应用,也就是旧版本应用,如图中 App1 version1 . App2 version1 . App3 version3 . 当你想要升级 App2 到 version2 ,在蓝色环境中进行操作,即部署新版本应用,并进行测试.如果测试没问题,就可以把负载均衡器/反向代理/路由指向蓝色环境了. 随后你需要监测新版本应用,

蓝绿部署、滚动部署、灰度发布、金丝雀发布

微服务部署:蓝绿部署.滚动部署.灰度发布.金丝雀发布 在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险. 目前有很多用于部署的技术,有的简单,有的复杂:有的得停机,有的不需要停机即可完成部署.本文的目的就是将目前常用的布署方案做一个总结. 一.蓝绿布署 Blue/Green Deployment(蓝绿部署) 1.定义 蓝绿部署是不停老版本,部署新版本然后进行测试,确认OK,将流量切到新版本,然后老版本同时也升级到新版本. 1.特点

首富带你畅谈:蓝绿部署、滚动发布、灰度发布/金丝雀发布

首富带你畅谈:蓝绿部署.滚动发布.灰度发布/金丝雀发布 笔者: 张首富 时间: 2019-01-24晚 QQ群: 895291458 博客地址: www.zhangshoufu.com 根据2018年的DevOps发展报告来看,目前的DevOps发展速度非常之快,已经逐渐成为企业运维的标准方案.DevOps的核心就是敏捷和高效,敏捷和Scrum开发技术曾被认为是最好的技术.既然公司用到了CI/CD肯定就肯定避免不了持续部署,所以我们就需要考虑一套适合我们的发布方式,这个时候我们就需要了解一下这几

一文搞懂蓝绿发布、灰度发布和滚动发布

应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境,同时要保证系统不间断提供服务.长期以来,业务升级渐渐形成了几个发布策略:蓝绿发布.灰度发布和滚动发布,目的是尽可能避免因发布导致的流量丢失或服务不可用问题. 7.1 蓝绿发布 项目逻辑上分为AB组,在项目系统时,首先把A组从负载均衡中摘除,进行新版本的部署.B组仍然继续提供服务.当A组升级完毕,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署.A组重新提供服务.最后,B组也升级完成,负载均衡重新接入B组,

金丝雀发布、滚动发布、蓝绿发布到底有什么差别?关键点是什么?

金丝雀发布.滚动发布.蓝绿发布到底有什么差别?关键点是什么? ? 根据 2017 年的 DevOps 发展报告,高效能组织和低效能组织在软件交付的效率上有数量级上的差异.技术组织的软件交付能力是一种综合能力,涉及众多环节,其中发布是尤为重要的环节. ? 作为技术人员,大家可能听说过"滚动发布"和"蓝绿发布"等术语,但是很多人并不清楚这些术语背后的原理.本文试图总结当前主流的发布策略,每个的优劣,适用性,让开发人员特别是架构师对现代发布技术有一个更为清晰全面的认识,让