cover_image

持续交付:眼前与远方

龙井 DevOps三剑客 2017年05月17日 09:47

Jenkins的创始人kohsuke Kawaguchi在QCon 北京上的进行了主题演讲:Why,What,and How of Continuous Delivery。没听到现场演讲,仔细研读PPT之后,整理笔记如下:

KK是一位摄影爱好者,所以PPT里会有大量的精美图片,这PPT看着多舒心呀!

流程线已经改变过一次世界

福特在引入流水线生产之后,Model-T的组装时间缩短了8倍。1.3万名员工生产了30万量汽车,超过了300家竞争对手的总和,这就是效率的神话。不过后来丰田超越了福特,在不确定性越来越明显的现代社会,从卖方市场变为买方市场,单纯的效率已经不能满足企业的竞争,所以精益、敏捷、DevOps才会出现,继续探索效率和质量的新边疆,不过这都是后话了。


图片



软件正在吞噬世界

这个是共识,这是大家的全人类的挑战和机遇,对我们从事工程效率和过程改进的人来说,不断改进软件交付的方式和效率,没有止境。


图片



1号需求:业务连续性(不停机)

各大权威机构对IT、DevOps、Continuous Delivery的预测和评估。

图片

业务连续性也只是其中一项需求而已,整体上来讲,我们要解决的build the things right and build the right things.从KK的PPT里获取的信息是,他认为,持续交付和自动化是我们需要的答案



图片



持续交付分析


图片

KK的持续交付相关内容梳理的还是很清晰的。这张图也可以说是DevOps的管理与工程实践框架。DevOps是一组文化方法和技术实践。


维度:

  1. 阶段:产品定义、计划、编码、编译、构建、单元测试、分析、集成、集成测试、打包、Place、压力测试、验收测试、发布、部署、监控其中的构建和编译、单元测试并列,不清楚这里的构建表示什么?我理解的构建时编译、打包、或者在加上单元测试、代码分析的整体。自动化构建的目标就是要输出(高质量)可以部署和测试的软件包。另外,关于Place也没有找到对应的解释,有点像部署或者分发

  2. 环境

    1. 开发环境

    2. 预发布环境(类生产环境)

    3. 生产环境关键中缺少独立的测试环境,从图上的分布看,应该是包含在Development中的

  3. 方法

    1. 敏捷“对特性进行识别、排序、调整的增量开发方法”。不太理解,敏捷的具体方法框架有很多,包括Scrum,XP,Kanban(准确的说属于精益方法)。还有SAFe,Less等规模化框架。

    2. 持续集成持续集成是持续交付的基础,持续交付是DevOps的核心工程实践。非常重要。

    3. 持续交付

    4. 持续部署关于持续交付和持续部署我的看法略有不同,持续交付和持续部署的差别只在是否手工进行部署。持续交付是将部署到生产环境的权利交给了业务人员,一键进行部署,而持续部署是每次提交都进行自动化部署到生产环境。这两种模式下的分支策略,软件架构的要求也是不一样的。另外,红色框的逻辑没有理解明白。


关于持续交付和持续部署我的看法略有不同,持续交付和持续部署的差别只在是否手工进行部署。持续交付是将部署到生产环境的权利交给了业务人员,一键进行部署,而持续部署是每次提交都进行自动化部署到生产环境。这两种模式下的分支策略,软件架构的要求也是不一样的。另外,红色框的逻辑没有理解明白。

生存还是毁灭,你可以选择

每年的State of DevOps Report都会公布四个关键指标的数据:部署频率、周期时间、部署失败率、故障修复时间。高效能IT组织和低效能IT组织的差异非常大。KK的这两张图也非常形象的说明了这个问题。

图片


现状和方向

敏捷团队的占比

上游敏捷的(管理过程,比如Scrum)团队占比33%,下游敏捷的(持续交付)的团队占比13%。这也符合国内的情况,很多团队刚开始做敏捷的时候都是从管理过程开始敏捷,即从Scrum入手,但是效果一般都不尽如人意。我认为持续集成和自动化测试是敏捷的两条腿,想要敏捷跑起来,此二者必须同时建设才能让敏捷体现其快速响应变化的价值。

图片



非敏捷团队占比

根据KK的数据,目前有87%的团队,依然没有实现下游的敏捷,即持续交付,持续部署的实施较少或者不成熟。这依然导致价值的交付长达数月。

图片



成熟度级别

KK将敏捷(CD、DevOps)的级别划分为团队级,跨团队级,企业级。这个和DevOps之父Patrick的DevOps5个精进级别颇为相似。

图片

企业级的敏捷和DevOps还有很长的路要走。企业级的改进需要组织、文化都要共同变化。之前在参加敏捷培训,老师提到诺西在敏捷的很早也很深入,摩托做CMMI和6 Sigma也做的很好,但是这些企业现在都不在了,其中也就跟组织、战略、文化的敏捷有关。下边的人玩儿的很嗨,只是总正确的方法在做错误的事情而已。颇有感触!


改进四象限

KK基于团队级、跨团队级、企业级以及上下游阶段,将改进方向划分为四个象限。

图片



  1. 团队级的敏捷

  2. 团队级的CD

  3. 企业级的敏捷

  4. 企业级的DevOps(笔者认为2017和2018年,国内企业一定会迈进企业级的DevOps转型和落地)

改进路径与模式

KK基于四象限将改进划分为2条路径和2种模式

路径一:

从团队敏捷到企业级(组织级)敏捷,再到企业级DevOps


图片


路径二:

团队级敏捷—>团队级持续交付—>企业级敏捷—>企业级DevOps图片我所了解的企业,偏向于类似第二种,都显示在团队级别进行敏捷和持续交付的尝试,逐渐成熟。

自下而上的改进

这种模式应该是比较常见图片

自上而下的改进

图片

DevOps转型策略

KK给出了自己的建议:

  1. 识别试点项目

  2. 组建跨职能团队

  3. 采用统一的技术

  4. 基于可度量的KPI和里程碑建立计划

  5. 干吧

  6. 度量,文档化,改进

  7. 规模化实战

工程实践

图片关于持续交付,KK重点强调了:A straightforward and repeatable deployment process is important for continuous delivery.

架构与实现技术

  1. 特性开关

  2. 灰度发布

  3. 微服务以上三个技术对发布和部署都有很大的提升,特性开关可以调整应用的运用时状态,灰度发布逐步的切换流量,微服务可以做到单个服务的独立发布和部署。

  4. 基础设施技术

  5. 蓝绿部署

  6. 金丝雀发布

  7. 凤凰环境

  8. 不可变基础设施

基于Jenkins的CD/DevOps生态系统

图片

Jenkins是驱动整个持续交付和DevOps的核心组件图片

以上就是我在研读KK的PPT过程中的思考和记录,最近刚接触一个概念:黄金思维圈,如下图所示:

图片

黄金思维圈帮助我们认知世界,当然也可以帮助我们认知持续交付,尝试分析了一下:Why:持续且快速、可靠的自动交付软件给用户:

  1. 实现价值的持续交付,赢得市场竞争

  2. 提升研发(增值活动)的时间,极大化增值活动产出How:建设自动化、可重复、可靠的持续交付流水线(IT服务供应链)主要包括代码管理、持续集成、自动化测试、自动化部署、基础设施自动化管理等方面的工程能力What:

  3. 每次代码提交都需要经过流水线验证

  4. 每次部署的版本都经过多环境验证

  5. 部署频率可以得到提升

  6. 周期时间(从代码提交到部署上线)的时间可以到分钟级

  7. 部署失败率低

  8. 部署失败的修复时间短,影响小




继续滑动看下一个
DevOps三剑客
向上滑动看下一个