[转载]版本发布模式有几种?

现在,IT媒体把DevOps炒的火热,但还是让我们来一起研究一下最基本的东西吧。因为这些最基本的东西会从根本上影响你做事的方式。

 

今天先谈谈软件版本发布模式。

选择版本发布策略时,通常有以下三个维度可以调整(时间、特性集和质量)。

 

依据三个调整项,可以总结为如下三种发布模式:

 项目制发布模式(Project Rlease Mode);

 传统版本火车模式(Release Train Mode)

 城际快线模式 (IntercityExpress Mode)

 


 

项目制发布模式是指在软件某一个版本规划中,预先确定该版本所需包含的特性集合,当该集合内的所有特性全部开发完成(通常不包含那些尚未开发完成的特性的相关代码),并且达到相应的发布质量标准后,才能发布该版本。前后两次发布之间的时间间隔并没有明确的规定,而是根据前一版本所有特性集合开发完成并达到发布标准所需时间进行评估确定的。

明显的好处在于:可以确切地知道每个版本包括哪些具体功能,有利于商业套装软件的售卖模式(卖版本拷贝和license,收取软件维护费用,当包含有新功能的版本发行后,再向客户收取新版本的升级费用)。同时,这也符合人们的安全生产习惯,即:不能够把未完成的功能带到即将发布的版本中,因为这会增加缺陷风险。

其不足之处在于:通常项目整个交付周期较长,参与人员众多。当在版本研发周期内,因某些原因导致需求变更(如增加需求、修改原有需求实现方式、或者进行需求置换)时,需要重新确定项目的交付时间,就会影响那些可以按期交付的需求的使用时间。因为这些需求通常不得不等待所有需求实现完成后才能一起发布。

 

传统发布火车模式常见于大型套装分发类软件。大型传统软件企业通常有多条产品线,各产品线之间存在非常复杂的相互依赖关系。为了能够使各产品线协同发布,这些企业通常会为每条产品线都制定好每个版本的发布周期,即:每个版本都象一列火车,事先计划好什么时间发车。为了能够准时发布,要求所有参与到该版本开发的团队必须对齐该版本的各个开发阶段。这种严格的时间一致性要求是因为该产品线的时间变更会引起其它产品线的变更,而这些更改很可能影响共享的系统集成测试环境的分配。 在大多数情况下,由于计划和集成依赖关系,发布列车设置为季度交付窗口,但通常不会超过10个月。

当公布这种发布火车时间表时,发布管理团队通常提前与负责各种产品系统开发的团队(有时甚至提前几个月),并将其结论公布在企业版本表中,类似于下图(LiberOffice的版本火车的时刻表 )。

 

提前几个月制定发布火车的时间表,原因纯粹是让各种业务和技术部门有足够多的时间进行预计划,以便做出依赖和影响的相关评估工作。

这种模式期望通过更长时间的预计划,保障三个维度(时间、质量、特性)都能符合预期。

这种模式的好处在于:用户可以事先了解重要特性在各版本的分布,以及对应版本的发布时间,并能够提前体验到最新产品版本所提供的新特性,然后再根据体验结果,决定是否将其应用于自己的生产环境上。而且,既便决定要在自己的生产环境中使用这个版本,也可以等到这个新版本成熟稳定之后再使用。

其不足之处在于:需要提前较长时间做时间计划,而且制定发布计划的活动是一个非常正式和结构化的过程,并且需要一些格式化数据,以确保参加发布火车的团队能够对正式加入的可行性做出判断。这些数据包括:

1. 发布详细信息(相对标识,名称,部署日期,风险级别,发布类型 - 企业,计划或投资组合)

2. 整个生命周期中各个阶段及预定日期,如下图(LibreOffice5.4版本火车的时间表 )所示。

3. 每个阶段要完成的活动和任务

4. 里程碑时间和质量要求

5. 负责管理发布火车的主要负责人。

 

 

 

 

城际快线模式(Intercity Express Mode)是指在发布策略三要素中选择固定其中的时间和质量两个维度,且时间周期相对较短(如一个星期,甚至一天),针对那些在发布时间点前已达到固定质量标准的特性进行发布。

它与传统发布火车模式的区别在于两点:

(1)发布周期间隔较短,通常在两个星期内;

(2)负责特性开发的团队可以自己选择搭乘哪列城际快线,而不必提前很长时间确定下来。

这种模式常见于提供互联网服务或SaaS服务的软件公司。其好处在于减少了团队及角色之间的协调成本。因为每个人都事先知道每次发布的具体时间点,所有工作任务都可以按这个时间点提前进行协调。而且,即使某个特性没有及时赶上最近的一次版本发布,他们也确切地知道这个特性是否可以在下一次发布时间点对外发布。

比如,Facebook Web主站的发布周期是每个工作日两次发布。

 

这种城际快线模式的优点在于

(1) 每个人都非常清楚各个时间点;

(2) 每个人都感觉到特性进展;

(3) 速度不断提升;

(4) 更加聚焦于生产质量。

当然,也有其不足之处

(1) 未完成的代码也会一同发布出去;

(2) 每个人都有紧迫感;

(3) 如果频率变慢,需要更多做计划的时间

那么,这样的发布火车,间隔多长时间发出一趟合适呢?在不了解企业具体状况时,这是一个非常难回答的一个问题,但仍旧可以给出一些建议,

即:在不影响用户体验、不增加成本且合规的前提下,让发布周期尽可能缩短到令你感到有些紧张的节奏。比如原来每个月发布一个版本,现在可以把两个星期做为一个目标。当然,这不可能轻松做到。

 

分支策略与版本发布模式之间的关联关系

分支策略与版本发布之间有一种微妙的相关性,在时间周期较长的项目制发布模式下,研发团队采用的分支策略通常会倾向于主干开发模式,而在使用城际快线模式的团队中,也通常会倾向于采用主干开发模式。而发布周期在两者之间时,其分支策略通常会倾向于“多分支开发,主干发布”的模式(无论是特性分支也好,还是团队分支也好)。当然,这并不是绝对的,其中会有很大的重叠部分,通常会受团队成员人数和产品架构影响。

项目制发布模式不会消失。毕竟每个新产品在完成第一个基本的MVP前,都需要这样一个首次启动过程。目前仍旧有很多传统IT企业采用项目制发布模式。

然而,城际快线模式越来越受到欢迎。已经有越来越多的企业 开始使用这种城际快线模式。即使在那些目前的版本发布周期较长的企业中,也常常在项目制发布模式中套用城际快线模式,即:在项目周期内加入固定时间的迭代,并要求在每个迭代结束时都能得到可交付状态的产品。这里的可交付状态是指软件可以正常运行,且已完成的软件特性达到发布质量标准,而非可商业化发布。

一般来说,当发布周期短到一定程度后,主干开发模式更加具有优势,因为分支开发模式的合并成本会成为城际快线发布模式的障碍。

如果发布周期等于或短于两个星期,建议软件团队毫不犹豫地改进工作方式,转向“主干开发模式”。

 

很多互联网公司选择城际快线模式。如2010年之前,Facebook主站就开始使用这种城际快线模式,2012年更是达到每个工作日定时发布两次。其移动端的发版节奏也从最初的项目制发布模式改为城际快线模式。而google的Chrome PC版本也是选择了城际快线模式 ,其Beta版本每周发布一次,而Stable版本每月发布一次。在国内公司中,2011年的百姓网也使用这种发布火车模式,每个工作日早上七点钟更新其网站。

 

虽然项目制发布方式短期内不会消失,但是,城际快线模式可以做为软件交付团队能力的一种指示器。

 

标注: 《版本发布模式有几种?

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
刚刚发布的ThoughtWorks技术雷达 建议技术团队“暂缓或谨慎”使用反模式“CI theatre(伪CI,可以理解为不完整的持续集成)”。 “伪CI”描述的是实践持续集成(CI)过程中的一些错觉,然而这些并不是真正的CI实践。 基于持续集成,我和同事 Emily Luke做了一些研究, 我将分享伪CI是什么样的,为什么我们建议你“暂缓或谨慎使用”,以及预防伪CI的方法。持续集成我最喜欢的CI定义来自于continuousdelivery.comCI开发人员定期(至少每天)将他们所有的工作集成到主干(也称为主线或主干分支)这个引用中暗含了CI实践的两个基本原则。第一个是“把他们所有的工作集成到主干”;第二个是“至少每天”。对于CI还有一系列其他原则和实践,例如:将所有内容都检入您的代码库,构建每个提交,自动化构建,保持快速构建,并有可以自我验证的代码, 还有Martin Fowler 关于持续集成的评论中的可视化故障并立即修复故障等。我个人认为 每天至少检入代码到主干分支一次 是CI的基础。没有达到这一点就只是伪CI而不是真正意义上的CI。伪CI是什么样的?这是我们调研到的一个故事,一位经验丰富的开发人员(让我们称他为David)来自湾区的一个中型创业公司,每周有两次产品交付。 David说他的组织正在践行CI,他说:“是的,我们用Circle CI”,他描述了一个具有挑战性的场景,曾经在一个分支上工作了一段时间,大约修改了100个文件和7000行代码,然后在代码审查阶段就开始招架不住了,因为他要向他的同事解释所有的代码变更的原因。“最具挑战性的事情是你最终要将一大堆功能集中到一个提交里,因为它们都是这个组件的一部分”,他解释说:“我希望有一个更好的方式来分解这些提交,因为很难把所有事情(变更历史)记在脑子里。”如果这个情况你听起来很熟悉,那么你也在做伪CI。 如果有下面的这些场景,那么你们就是在做伪CI:当有人问起你们在实践CI吗? 如果你说我们有一个CI服务器并且我们使用X工具在我们的调查中,只有10%的参与者承认有CI服务器与CI践行不一样。 相反,90%的个人表示他们正在践行CI,无论他们是否有专门从事CI的基础知识。 所以简单的认为只要有一个CI服务器就是“在做CI”,这就清楚地表明是在做“伪CI”。使用长期开发分支,但不会定期检入master主干在David的故事中,他们并没有实践每天检入master主干,这就是“伪CI”的标志。 这是我们在调研中常看到的一种模式,其中团队在master主干上运行CI,但不频繁构建,也不是每天都在提交。 或者他们在分支上运行CI,但不会频繁的集成到master主干。 只对特性分支运行CI,其实应该称之为持续隔离(continuous isolation)才对.合并分支时感到焦虑和疲惫真正的持续集成要把代码所有者的责任意识扩展到整个团队。 这改变了团队内部人员的观点以及他们对失败构建的态度。 不再是“我的宝贵的分支”,或是“我的错误导致构建被破坏”,而是“我们的代码”和“我们的失败”。David遇到焦虑和疲惫的事实清楚地表明,他忽略了CI的一个重要的优势:持续反馈和代码集体所有权。伪CI还有更多的一些现象,虽然我们发现有一些并不那么常见,但它们仍然存在一些问题,构建的时候,仅有极少的测试覆盖允许构建长时间处于失败状态虽然David的团队引入了一个备受尊崇的CI工具和常见的流程,如特征分支和代码审查,但他们并没有实施全套CI实践,因此错过了许多好处。 我们遗憾的发现,在我们的研究的组织中90%发生了这种情况。一些组织实施伪CI中反而错失了CI的主要优势 - 快速反馈,代码集体所有权,并准备达成持续交付如何避免,预防和解决伪CI的问题?如果您确定可能正在遭受伪CI之苦,则可以通过三种方式来解决问题并进行持续改变。1. 提交更频繁回到根本,尽量频繁地提交,每天至少提交一次应该是最低目标。 如果你还没有开始做CI,这就是你可以开始的地方,即使你在做CI,依然会有改进的空间。我喜欢“频率降低难度”的说法。 往往我们在做一些事情时,任务变得越小,则其更容易被实现。 持续集成就是是一个典型例子。 我的建议是要更加频繁地检入你的代码到代码库并且将开发分支集成到主干分支,至少每天集成一次”。2. 基于主干分支开发有很多论坛在讨论基于主干还是基于开发分支进行开发,我不想讨论那些血淋淋的细节。 然而,在我们的调研中,当我们与一些曾经在实践CI过程中感到痛苦的人交谈时,没有引入主干开发的团队对此有更深刻的感受。 DevOps现状调查报告-2016 还发现,基于主干开发和持续集成是达成持续交付的关键因素,同时也能建设更高效能的团队。基于主干的开发肯定会有一定的挑战,但它可以把问题提前暴露出来,而不是要等到代码合并、代码审查甚至到延迟发布的时候。如果你想达到更好效果的CI和CD,我建议在主干上做开发,或者如果你更愿意使用短周期的临时分支(合并到主干之前不到一天)进行开发,那么最好同时不要超过三个以上的活跃分支。3. 自动化自动化是做好持续集成的基石,所以如果你还没有自动化一切,现在是开始的好时机。 如果你认为已经实现了所有自动化的功能,那么每次有人手动地做任何事情超过一次,便要问自己“这个为什么不能自动化”? 我已经观察到自动化不仅可以帮助您在CI中变得更好,还可以帮助您开始持续交付。总结现在你知道什么是伪CI了,如果你的团队正在这么实践伪CI,那么你可以阻止这种情况继续发生了。 如果您仍然感到困惑,我建议你在Martin Fowler的博客“CI Certification test”做一个测试, 以确认你的组织是否正在做可靠的CI。 如果你通过了CI测试,那太好了,现在是考虑您是否准备好实施持续交付的时候了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值