Jenkins的创始人kohsuke Kawaguchi在QCon 北京上的进行了主题演讲:Why,What,and How of Continuous Delivery。没听到现场演讲,仔细研读PPT之后,整理笔记如下:
KK是一位摄影爱好者,所以PPT里会有大量的精美图片,这PPT看着多舒心呀!
福特在引入流水线生产之后,Model-T的组装时间缩短了8倍。1.3万名员工生产了30万量汽车,超过了300家竞争对手的总和,这就是效率的神话。不过后来丰田超越了福特,在不确定性越来越明显的现代社会,从卖方市场变为买方市场,单纯的效率已经不能满足企业的竞争,所以精益、敏捷、DevOps才会出现,继续探索效率和质量的新边疆,不过这都是后话了。
这个是共识,这是大家的全人类的挑战和机遇,对我们从事工程效率和过程改进的人来说,不断改进软件交付的方式和效率,没有止境。
各大权威机构对IT、DevOps、Continuous Delivery的预测和评估。
业务连续性也只是其中一项需求而已,整体上来讲,我们要解决的build the things right and build the right things.从KK的PPT里获取的信息是,他认为,持续交付和自动化是我们需要的答案
KK的持续交付相关内容梳理的还是很清晰的。这张图也可以说是DevOps的管理与工程实践框架。DevOps是一组文化方法和技术实践。
维度:
阶段:产品定义、计划、编码、编译、构建、单元测试、分析、集成、集成测试、打包、Place、压力测试、验收测试、发布、部署、监控其中的构建和编译、单元测试并列,不清楚这里的构建表示什么?我理解的构建时编译、打包、或者在加上单元测试、代码分析的整体。自动化构建的目标就是要输出(高质量)可以部署和测试的软件包。另外,关于Place也没有找到对应的解释,有点像部署或者分发
环境
开发环境
预发布环境(类生产环境)
生产环境关键中缺少独立的测试环境,从图上的分布看,应该是包含在Development中的
方法
敏捷“对特性进行识别、排序、调整的增量开发方法”。不太理解,敏捷的具体方法框架有很多,包括Scrum,XP,Kanban(准确的说属于精益方法)。还有SAFe,Less等规模化框架。
持续集成持续集成是持续交付的基础,持续交付是DevOps的核心工程实践。非常重要。
持续交付
持续部署关于持续交付和持续部署我的看法略有不同,持续交付和持续部署的差别只在是否手工进行部署。持续交付是将部署到生产环境的权利交给了业务人员,一键进行部署,而持续部署是每次提交都进行自动化部署到生产环境。这两种模式下的分支策略,软件架构的要求也是不一样的。另外,红色框的逻辑没有理解明白。
关于持续交付和持续部署我的看法略有不同,持续交付和持续部署的差别只在是否手工进行部署。持续交付是将部署到生产环境的权利交给了业务人员,一键进行部署,而持续部署是每次提交都进行自动化部署到生产环境。这两种模式下的分支策略,软件架构的要求也是不一样的。另外,红色框的逻辑没有理解明白。
每年的State of DevOps Report都会公布四个关键指标的数据:部署频率、周期时间、部署失败率、故障修复时间。高效能IT组织和低效能IT组织的差异非常大。KK的这两张图也非常形象的说明了这个问题。
上游敏捷的(管理过程,比如Scrum)团队占比33%,下游敏捷的(持续交付)的团队占比13%。这也符合国内的情况,很多团队刚开始做敏捷的时候都是从管理过程开始敏捷,即从Scrum入手,但是效果一般都不尽如人意。我认为持续集成和自动化测试是敏捷的两条腿,想要敏捷跑起来,此二者必须同时建设才能让敏捷体现其快速响应变化的价值。
根据KK的数据,目前有87%的团队,依然没有实现下游的敏捷,即持续交付,持续部署的实施较少或者不成熟。这依然导致价值的交付长达数月。
KK将敏捷(CD、DevOps)的级别划分为团队级,跨团队级,企业级。这个和DevOps之父Patrick的DevOps5个精进级别颇为相似。
企业级的敏捷和DevOps还有很长的路要走。企业级的改进需要组织、文化都要共同变化。之前在参加敏捷培训,老师提到诺西在敏捷的很早也很深入,摩托做CMMI和6 Sigma也做的很好,但是这些企业现在都不在了,其中也就跟组织、战略、文化的敏捷有关。下边的人玩儿的很嗨,只是总正确的方法在做错误的事情而已。颇有感触!
KK基于团队级、跨团队级、企业级以及上下游阶段,将改进方向划分为四个象限。
团队级的敏捷
团队级的CD
企业级的敏捷
企业级的DevOps(笔者认为2017和2018年,国内企业一定会迈进企业级的DevOps转型和落地)
KK基于四象限将改进划分为2条路径和2种模式
从团队敏捷到企业级(组织级)敏捷,再到企业级DevOps
团队级敏捷—>团队级持续交付—>企业级敏捷—>企业级DevOps我所了解的企业,偏向于类似第二种,都显示在团队级别进行敏捷和持续交付的尝试,逐渐成熟。
这种模式应该是比较常见
KK给出了自己的建议:
识别试点项目
组建跨职能团队
采用统一的技术
基于可度量的KPI和里程碑建立计划
干吧
度量,文档化,改进
规模化实战
关于持续交付,KK重点强调了:A straightforward and repeatable deployment process is important for continuous delivery.
特性开关
灰度发布
微服务以上三个技术对发布和部署都有很大的提升,特性开关可以调整应用的运用时状态,灰度发布逐步的切换流量,微服务可以做到单个服务的独立发布和部署。
基础设施技术
蓝绿部署
金丝雀发布
凤凰环境
不可变基础设施
Jenkins是驱动整个持续交付和DevOps的核心组件
以上就是我在研读KK的PPT过程中的思考和记录,最近刚接触一个概念:黄金思维圈,如下图所示:
黄金思维圈帮助我们认知世界,当然也可以帮助我们认知持续交付,尝试分析了一下:Why:持续且快速、可靠的自动交付软件给用户:
实现价值的持续交付,赢得市场竞争
提升研发(增值活动)的时间,极大化增值活动产出How:建设自动化、可重复、可靠的持续交付流水线(IT服务供应链)主要包括代码管理、持续集成、自动化测试、自动化部署、基础设施自动化管理等方面的工程能力What:
每次代码提交都需要经过流水线验证
每次部署的版本都经过多环境验证
部署频率可以得到提升
周期时间(从代码提交到部署上线)的时间可以到分钟级
部署失败率低
部署失败的修复时间短,影响小