拥有3万多人的阿里巴巴,线上有上万个应用,上亿的用户即时在线,每天有几百个应用在线上更新,就像在时速200公里的高速公路上横穿马路维修栅栏一样,时刻保持着心惊胆战,而保护这个过程的体系就是阿里巴巴持续交付工具与实践。

现代开发企业中如何做好持续交付是一件异常重要的事情,在互联网企业中更是如此。而阿里巴巴在这么多年的研发管理基础上,对如何做好持续交付提出了一套全新的模型与实践。

阿里技术保障部产品专家戴蒙在“2016云栖大会上海峰会”专场《“互联网+”架构及实践专场-企业级信息系统云化演进之路》中分享了阿里云持续交付打造高质量交付和高质量软件的经验。

本次演讲深度分析了阿里式的持续交付理论,同时分享如何通过工具提升研发管理实践效果。交互无小事,任何与客户有关的都是大事,做好了研发管理才能平安如意,如同登陆在月球虹湾里那么高效安稳。

以下为整理后的演讲实录。

为什么会有持续交付的思考?

大家知道双11当时每秒钟十几万次的交易量,我们这时候去做软件更新时一定是要做到持续的,不会中间中断,代码更新完就马上要上线的,而不是说任何的操作要隔上几个月、几天才能去更新,这肯定是不行的。我们到底怎么去解决这些问题?我们总结出影响发布质量的关键因素,分为两大块:

  • 未发生故障
  • 发生故障

未发生故障的时候,我们应该做code review、测试、灰度、发布;在发生故障之后,我们先要去应用定位,然后做应用回滚,然后做故障定位,定位完成之后是修复。在持续交付里面这几个关键因素都会用到。

持续交付是什么?

持续交付包含几个方面:集成、持续、部署、交付。

集成是什么呢?我们认为在一起就是集成,就是代码放在一块,你的逻辑放在一块就叫集成。只有不停的集成才是一个持续集成。我们有时候会产生这样的问题,一个人在部署的时候另外一个人在测试,有可能就会产生冲突,所以部署是保证集成独立性的关键要素。多次的集成产生一次的交付。如果前面不做集成的话在做交付的时候会不会很担心?所以只有在多次集成之后才会去做这次交付。

习惯养成

持续交付里面很多内容是我们的一个习惯,怎么去养成这些习惯呢?就是人在做一些事情的时候,或者是在做集体的运动当中是有心理过程的。1967年美国有一个高中老师做了一个叫做“第三次帝国”的实验,就是他为了证明集体主义养成习惯是非常快的。第一天,他做的是来上课的时候让所有的学生起立坐下,他说起立的时候就起立,他说坐下的时候就坐下,一共花了5分钟。然后让所有的学生到教室外面,他做了示意之后学生进来之后再坐下,在这个过程中鸦雀无声。就是说人类的习惯开始可能只需要5分钟,养成这个习惯只有用了3天。怎么样去养成一个习惯是非常容易、非常惯性的一个事情,我们通过一个良好的工具、一个良好的计划是可以养成我们持续交付中应该去做的事情。影响发布质量的关键因素就是我们应该要去养成的习惯。

不好的持续交付线

图1最简单、最缩小的一个持续交付的过程

图1中会看到这样几个节点,第一个节点是代码提交、编译、单元测试。代码提交之后并不能在旁边坐着喝一杯咖啡,其实这个过程是不对的,你的反馈量是不够的,只有把编译和单元测试都放在一块的时候才可以。第二个节点是我们的部署环境和集成测试,部署环境和集成测试为什么单独分开是有问题的呢?部署和集成测试应该是在同一个活动中的,部署会影响集成测试。任何一个集成测试环境,在别人会随意点到你这个部署造成你的环境崩溃的情况下,整个测试是不安全的,我们希望活动间不相互影响,所以这两个环节应该并在一块。

好的持续交付线

图2好的交付线框架图

如何去养成一个好的交付线?其实很简单,图2中,在第一个节点我们应该把代码检出,和我们的编译、单元测试放在一块,第二个节点就是我们的部署和集成测试,第三个节点是部署冒烟环境和冒烟测试,第四个节点是部署生产环境和冒烟测试。

图3持续交付线的数据理论

在好的交付线基础上我们提出了一套理论,我们可以看到整个持续交付的过程里面有几个点:原子级活动,覆盖面越来越大,代价越来越高,频度越来越低。最终根据这四个原则我们一直不停的去做持续交付的话会出现一个数据,就是持续集成的次数肯定会大于等于持续部署的次数,最终会大于持续交付的次数,即图3中 M大于等于N大于等于1。如果这里面的数据是趋向于相互都相等的,就是说代码提交后直接到交付了,这个过程一般是不太正常的,很难达到这个过程,中间还是会有一些集成和测试的过程。

持续交付工具

在开发企业中会去做包括TDD、敏捷开发这些过程的一些事情,做这些事情是为了什么?肯定是为了提供一个高质量的软件马上去交付到我的线上或者是交付到我的服务器中,我们中间会应用一些工具。

敏捷宣言:个人和互动高于流程和工具;工作软件高于理解文档;客户协作高于合同协商;变化响应高于计划遵循。

我们既然要做到敏捷宣言里面敏捷开发的一些过程,就需要用到持续交付的工具,持续交付的工具需要包含几个部分:项目管理、代码托管、构建管理以及持续发布,最后形成持续交付线。

图4项目管理

项目管理需要动态性的文档。我们在网页上有一些内容,页面上会有相应的标签提示你是什么样的内容,我们的任务墙上会产生相应的故事卡,就是敏捷开发里面我们谈所谓的故事,我要分解出最终能够实现的故事,打通它的特性。我们认为所有的人员都应该在一份文档中去观察、修改、编辑你的内容。传统的开发模式里面我们会分角色,这个事情在敏捷开发里面其实是强烈反对的,我们更多希望他是一个角色的同步,大家应该在能力和角色上是打通的。我们通过这份文档让所有人习惯于在一份文档中更新信息,造成信息的统一性,最后在人员的能力上进行一个打通。

沟通

在我们的软件开发过程中沟通是非常重要的环节。第一是我们的面对面沟通,第二是电话沟通,第三是即时消息,第四是邮件。在我们的持续交付里面我们也都提供这样的功能,包括现在在市面上有一些做项目协作的软件或者是平台,大家都是追求怎么样提高我们的开发效率,就是提高我们的沟通。

图5代码管理系统图

图6代码库

阿里巴巴现在提供了一套代码管理的服务:

  • 集合编译、测试、发布等插件;
  • 支持所有Git命令,兼容所有Git工具;
  • 私有Git仓库,存储任何类型的源代码及文件;
  • 在线浏览和管理代码,提升研发效率。

这套服务非常高可用,而且是无限存储。比如说我们的OSS、对象存储、高速带宽,我们是在线浏览的,我们可以进行一些在线操作,我们是协作开发的,我们任何的信息都会及时沟通交流,最后统一入口。

图7构件管理系统图

图8构件管理

阿里云构件仓库实现高速并且稳定的Maven镜像管理服务,每天与其他中央库同步,提供高速稳定的网络和服务。可以通过构件服务上传、下载插件或依赖包,这使得在构建时可以快速下载依赖包,也可以上传依赖包提供给其他开发者使用。

整个持续交付应该是一套完整的系统。我们做到的备份效果是非常好的,会达到1:9的备份,我们还提供一个构件的服务,构件也会达到1:3的备份。而且我们的上传非常简单。

建立反脆弱系统

图9持续交付系统

图10持续发布线模板

为什么要做持续交付,还有一个非常重要的点——人肯定会产生意外的情况,整个世界都会有意外的情况,我们怎么在产生意外事件时保护你的代码和开发?我们就应该用到持续交付系统,(上图)就是我们的持续交付系统,我们会非常快速高效的让软件放到线上。而且我们现在还提供了几种服务,我们可以通过ECS的部署,我们还有容器的服务,我们可以部署到容器上,而且我们可以通过阿里云的容器非常简单快速的上传下载。同时我们还提供了一个审批的服务,现在持续集成的软件里面其实没有这一步。

云协作从这里开始

持续交付平台(CRP,Continuous Rlease Plaftorm)提供软件生命周期全环节服务,包括项目管理、需求管理、缺陷管理、代码托管、构件管理、开发环境管理、持续交付线、构件管理、依赖管理、测试管理、一键部署、监控管理、团队协作等。让您的软件简单、快捷、安全、高效的交付

研发管理---(1)持续交付相关推荐

  1. 研发协同平台持续交付2.0架构演进

    源宝导读:为了打通CI/CD环节,实现持续的端到端的交付能力,RDC平台提供了在线化的更新服务,随着业务量增长与场景的需要,我们对更新服务架构重新设计,实现了2.0版本.本文将介绍更新服务2.0的架构 ...

  2. 研发协同平台持续交付之代理服务实践

    源宝导读:插件系统大大提高了系统的扩展性,有利于模块化开发.系统发布后,当我们需要对系统进行扩充,可以再不编译的情况下更新系统的插件即可.基于热拔插的软件系统提高了持续交付能力,在添加新特性的同时保持 ...

  3. 阿里巴巴B2B高效研发管理实践

    2017年1月13日举办的[云栖计算之旅]线下沙龙第4期研发管理专场,阿里巴巴技术质量架构师范之岳带来了题为阿里巴巴B2B高效研发管理实践的演讲.本文主要从互联网无线研发的问题与挑战开始讲起,重点讲解 ...

  4. 承担集团数万应用、研发人员日常工作,阿里持续交付平台的设计、迭代之道...

    摘要: 阿里持续交付平台已经经历了 8 年的不断迭代进化,成长为集团几万应用所依赖的最重要的研发工具,它的效率直接影响着几万研发日常工作.但平台不能只是工具的堆砌,更需要针对互联网时代的研发模式进行深 ...

  5. 阿里巴巴1682亿背后的“企业级”高效持续交付

    摘要: 在2017北京云栖大会上,阿里巴巴高级技术专家陈鑫(花名神秀),给大家带来了<1682亿背后的企业级高效持续交付>,引起强烈共鸣.神秀从技术负责人关心的研发流程混乱.质量无法保障. ...

  6. 承担集团数万应用、研发人员日常工作,阿里持续交付平台的设计、迭代之道... 1

    摘要: 阿里持续交付平台已经经历了 8 年的不断迭代进化,成长为集团几万应用所依赖的最重要的研发工具,它的效率直接影响着几万研发日常工作.但平台不能只是工具的堆砌,更需要针对互联网时代的研发模式进行深 ...

  7. 再见了,我的散装研发管理平台;再见了,4台ECS!

    周末的时候,收到好几个云服务器临近过期的通知短信,准备续个费,居然都要大几千!因为这几个都是以前低价抢购的,掐指一算,如果都续费的话,要蚕食好多利润!作为一名自己养活自己的独立开发者,节省成本是必备技 ...

  8. 掌门持续交付流水线大规模实践

    CD 平台是掌门的持续交付系统,流水线功能自 2020 年 3 月在 CD 平台上正式开放,目前已稳定运营一年多,超过 900 个应用启用了流水线功能,应用接入率超 60%,下图展示了流水线功能的关键 ...

  9. 微服务架构实战项目Serverless的持续交付与架构案例

    Serverless的持续交付 架构图如下: 在这个架构中,我们采用了前后端分离的技术.我们把 HTML,JS, CSS 等静态内容部署在 S3 上,并通过 CloudFront 作为 CDN 构成了 ...

  10. 研发协同平台持续集成Jenkins作业设计演进

    源宝导读:Jenkins作为一个开源的持续集成工具,被大家广泛使用.本文将分享,Jenkins在明源云研发协同平台中的运用,以及在其作业设计方面的演进历程. 一.作业设计1.0 起初,为了尽快推出研发 ...

最新文章

  1. 经典的C++面试题目
  2. 更改SYS密码,expiry_date 过期时间 没有更新,普通用户更改密码会更新
  3. JS 获取浏览器、显示器 窗体等宽度和高度
  4. Material UI 4.0.0-alpha.5 发布,新的 Roadmap
  5. Head First设计模式之命令模式
  6. 第八周项目4-个人所得税计算器
  7. 计算机组成原理——指令格式设计
  8. C语言嵌入式系统编程修炼之软件架构篇
  9. 基于知识图谱的古诗词推荐(python+爬虫+mysql+neo4j)(一)
  10. linux操作系统有哪些
  11. 数据库实验4 SQL语言-SELECT查询操作
  12. windows远程桌面互传文件
  13. coalesce---一个很有用的函数
  14. 刷题-丑数提取及丑数判断
  15. IOS 使用IconFont 图标
  16. 人民日报发推欢迎Google回归,但前提是遵守中国法律
  17. 运营活动系统的流程总结
  18. 元宇宙基本概念、特点及发展趋势初步探讨
  19. Python数据解读广大“钢铁直男”眼中的女神
  20. jxl操作excel单个单元格换行和获取换行

热门文章

  1. git 更换本地目录_git 本地库的使用
  2. ios获取新数据要不要关_100%安卓APP都在获取用户隐私,网络隐私进入深入区
  3. 创龙28377d历程_C28x系列的28069、28377D的PWM使用经验
  4. 《Reids 设计与实现》第十九章 慢查询日志
  5. HP LasterJet 3050驱动安装技巧,面向win7,8,8.1,10
  6. poj 2395 prime的递归实现
  7. Linux shell - 按时间和文件大小排序显示文件(ll)
  8. 【图论】【启发式搜索】【二分查找】[POJ 3897]Maze Stretching
  9. property属性[Python]
  10. HDU2842之斐波那契亚数列变形,动态规划