持续交付的实践与思考

本文讲的是持续交付的实践与思考【编者的话】一直以来都在做团队里的基础性工作,直到最近,成果开始慢慢展现,尤其是上周刚看完《持续交付》这本书后,总结已经做的工作,又有了些新的感悟。

【3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站】本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续交付(CI/CD)概览;持续集成系统介绍;客户端与服务端的 CI/CD 实践;开发流程中引入 CI、CD;Gitlab 和 CI、CD 工具;Gitlab CI、Drone 的使用以及实践经验分享等。

过去一段时间,我都是围绕着 Gitlab 的一些功能来开展的,从最开的代码与应用配置管理,然后到 CI 系统,提升代码质量,到最后完整的持续交付流程提升团队工作效率。

那么我就结合《持续交付》这本书的内容,正文开始。

为什么要有持续交付

  1. 不敢发布新功能:每次发布都会心惊胆战,因为一下子发布了太多功能,测试又没做好,而这时候产品催着要上线。另外按照以往的经验,由发布而出问题的的概率最高;
  2. 线上事故处理时间长:每次出线上事故,不能很快定位问题,如果是由于同事线上改动了什么,就更难定位问题了,而在之后大家可能会狠狠责怪那个同事,事实上,他也很无辜,因为没有人告诉他什么能做,什么不能做,或者该怎么做;
  3. 发布周期太长:由于每次功能完全开发完之后才会发布上线,而如果涉及到数据库更改或者迁移,发布周期可能会拖得太长;
  4. 协作问题:比如新人来到团队时,由于被限制了各种线上的权限,尤其是发布权限,会导致很多工作开展不顺利,而每次发布求助于其他同事的话,会造成沟通问题,进一步造成了协作上的问题。另一个,往往由于习惯于口头上说下要发布了,然后发布过程对其他人而言是不可见的,若是线上还需要操作些什么的话,几乎对其他人是更不可见的;

持续交付能做到什么

  1. 让软件构建、部署、测试和发布过程对所有人可见:由此,大家可以学习过程,了解其他人做了什么,在一个规范的流程中工作,促进协作;
  2. 改善反馈,更早发现问题:在一个完整的流水线中,可以设置多个『检查点』,简答来说,就是加入多个测试环节,保证代码质量,而在这个过程中,越早发现问题,修复的成本越低;
  3. 通过一个完全自动化的过程在任意环境上部署和发布软件的任意版本:在陈浩大神的 《从 Gitlab 误删除数据库想到的》 这篇文章里,提到: 人管代码,代码管机器,其实持续交付就能达到这个效果。并且在一种极端情况下,假如你使用的云服务商挂了,你也能在其它云服务商上面快速重建你的整个线上系统(当然,没那么简单)。

持续交付的几个原则

  1. 为软件发布创建一个可重复且可靠的过程:一键发布与回滚,如果发布出了问题,你几乎可以确定不是发布脚本本身的问题,因为这个脚本已经经过多次检验;
  2. 将几乎所有的事情自动化:手工发布及漫长又不可靠,采用自动化脚本,节省时间,节省精力;
  3. 把所有的东西纳入版本控制:采用变更管理,方便审计,将所有的变更都在掌控之中,出问题可以快速定位问题;
  4. 提交并频繁做让你感到痛苦的事情:小步快走,分散痛苦与风险;
  5. 提高内建质量:越早发现问题,修复成本越低,等 QA 或者用户告诉你应用有问题的时候,修复成本非常高,也增加了你计划外的工作;
  6. 『Done』意味着『已发布』:没有完成百分之多少这种说法,反推着你将任务分解,将功能尽快发布到生成环境中去,减少了产品反馈时间,提高了竞争力,也减少了风险;
  7. 交付是每个成员的责任:流程标准,每个人都可以参与到流程的每一个部分,促进协作,也帮助新人适应与提高;
  8. 持续改进:不断演进,改善发布流程,这个流程需要持续的改进,提高吞吐,增加产量,提高质量;

持续交付的实践

在目前的团队持续交付流程中,我们在每个环节的实践如下:

  1. 提交:单元测试 Mocha/AVA,以及测试覆盖率 nyc;
  2. 编译打包:即打包 Docker 镜像,推送到 Registry ,目前还没有完全引入 Docker 集群,因此部署过程省略;
  3. 部署文档:用 Ansible 脚本自动将 API 文档以及测试覆盖情况部署至静态网页文档服务器,这个时候可以直接将分支对应的文档给客户端开发,还可以直接查看测试覆盖率情况,确认与改进单元测试;
  4. Review:即提交 Merge Request,大家一起 Code Review;
  5. 部署应用:需要 Review 通过后,将代码合并至 master 分支,然后手工点击按钮部署;
  6. 回滚:假如应用出问题,可以点击按钮一键回滚;

可以看到,目前主要是缺失预发布环境,这一步还需要将环境搭建脚本完善之后才能做到,而目前公司运维团队还是与我们开发团队分离的,因此达到相要的效果还是得做些努力。

总结

目前我已经做到:将应用配置单独管理起来,以及部署相关的脚本都已经实现,因此才能很快地将持续交付流程跑起来。其实可以这么说:应用配置管理与自动部署脚本是持续交付流程的前提与基础。

而持续交付流程一旦完善了,能极大改善我们开发团队的交付能力,甚至倒逼产品与运维团队提高他们的效率:

  • 对于产品团队,我们能要求他们将需求拆分尽可能的细,一旦开发完成我们能快速部署,于是他们能更快得到反馈,从而提高产品的试错能力。
  • 对于运维团队,我们已经将部署流程优化了,于是他们能更专心于基础设置的维护与改善,同时也可以促进协作,推行全面的配置管理。

Reference

原文链接:持续交付的实践与思考

原文发布时间为:2017-07-26

本文作者:尼古拉斯

原文标题:持续交付的实践与思考

时间: 2024-11-02 12:29:24

持续交付的实践与思考的相关文章

让IT跟上业务思考的速度--从持续集成到持续交付

通过 7 个持续交付最佳实践,给读者一个思路,无论是建设持续交付能力,还是在进行持续交付平台的选型,都能够在业界经验的基础上走向更为正确的道路.同时,本文还引入了持续交付成熟度模型,目的是想帮助企业,把一个想象中全面而复杂的交付流程进行切分,按照环节和成熟度等级展现,将实现持续交付能力之路变得更为清晰.更可操作.有助于企业建立良好的期望和愿景,并开展切实可行的行动. 市场和业务瞬息万变,企业的 IT 部门必须面对产品上线周期不断变短的事实,也就是说,需要建立产品交付反馈圈,并让这个闭环圈的反馈速

阿里技术专家:持续交付与微服务背后的实践逻辑

讲师介绍 崔力强 阿里巴巴技术专家   <微服务设计>中文译者之一:曾在ThoughtWorks任职软件交付和敏捷顾问: 对持续集成.自动化测试有丰富经验:目前专注于持续交付SaaS产品的开发,提供精益需求管理.软件设计.敏捷转型相关咨询服务.    前言 大家好,我是崔力强.目前在阿里巴巴任职.负责一款持续交付领域的SaaS产品的开发.非常高兴能够和大家分享持续交付和微服务的话题. 本次分享的重点是持续交付.也会提到一些微服务的概念,以及持续交付和微服务之间的关系.今天会涉及的一些实践可能大

云效平台:企业级互联网架构下的持续集成与持续交付实践

摘要:本文的整理自2017云栖大会-南京峰会上阿里云高级技术专家鲁小川的分享讲义,讲义主要分享了阿里云云效平台对于企业级互联网架构下的持续集成与持续交付的实践经验,首先介绍了阿里云云效平台的起源,之后对于企业并发研发项目交付流程存在痛点进行了介绍,并介绍了云效平台针对业务痛点所能够提供的服务和能力,并且结合实际案例分享了云效平台持续集成和持续交付实践. 在2017云栖大会-南京峰会上,阿里云高级技术专家鲁小川做了题为<企业级互联网架构下CI/CD实践>的精彩分享.所谓CI/CD也就是持续集成与

阿里互联网研发团队的持续交付实践

摘要:本文的整理自2017云栖大会-成都峰会上阿里巴巴技术专家崔力强的分享讲义,讲义主要介绍了阿里巴巴持续交付实践的相关内容,持续交付的目标是 从用户(产品经理)提出一个想法.整个团队可以快速的把这个需求细化,按照增量的方式快速迭代,安全迅速的将新的功能发布上线.   在2017云栖大会-成都峰会上,阿里巴巴技术专家崔力强做了题为<阿里互联网研发团队的持续交付实践>的分享.持续交付的实践如何能够在一个大的企业高效的运转起来,考虑的最多的是成本和标准化.大企业,尤其是互联网企业,任何一个应用级别

持续交付与传统敏捷的矛盾

我在采用持续交付的组织中和开发团队工作一起工作,发现很多开发者认为的正确的敏捷团队的工作方式,在这里跑得不是很顺畅.我认为传统敏捷与持续交付的矛盾的根本在于,二者是采用不同的方式把软件变得"可以发布"(ready to release)的. 软件交付的演进 使软件变得可以发布的过程一直在不停进化,下面是一个简要的介绍: 瀑布模型 瀑布模型认为,当一个软件所有的功能都发开完毕的时候(也就是功能完整的时候),才可以发布. 敏捷: 敏捷引入的思想是,在整个开发过程中,软件都应该"可

超大型系统的持续集成与持续交付解决方案与阿里宙斯盾

作者简介:鲁小川,09年本科毕业于浙江大学软件学院,之后就一直就职于阿里巴巴B2B质量保障部,目前是云效持续集成与持续交付解决方案的负责人. 以下内容根据演讲嘉宾分享以及PPT整理而成. 今天分享的议题是<超大型系统的持续集成与持续交付解决方案及案例分析>,主要就是和大家聊聊阿里巴巴B2B技术部这几年来在持续集成与持续交付上实践经验,以及为什么要做宙斯盾系统平台产品来支撑持续交付.宙斯盾平台在阿里内部经过了5年多的积累沉淀,现在已经对外服务输出了,对外服务产品的名字叫做云效平台,后面还会介绍云

【8月16日直播】持续交付和质量红线牵手,RDC自动化测试和持续集成服务上线

​面对繁杂机械重复的测试工作,面对测试精度.难度极高的大数据量校验.单元测试.统计测试覆盖率等工作,面对多线程的并发测试,如何使用软件或工具,帮助减少重复机械工作,将繁杂工作流程化.自动化,提高测试的准确性和测试人员的积极性. 立即报名观看8月16日20:00直播内容 阿里巴巴研发协同平台资深开发工程师迪龙分享如何帮助企业把控质量红线? RDC提供了完备的Pipeline, 在整个研发过程开发代码提交后自动触发单元测试, 静态代码扫描.应用发布打包,部署, 自动触发集成测试, 构成了开发和测试共

[CRP 3月产品更新日志]多语言持续交付的支持

前情概要: 过去的几个月里,我们对Java和Node语言的持续交付做了以下一些事: 支持使用aliyun的maven仓库,也支持使用用户自有的maven仓库: 支持配置项文件和代码库的物理隔离存储,保证重要信息的私密性.同时又支持工作流编译时上传配置项文件,从而使得代码工程在编译时可以动态替换配置项. 支持Node语言编译时快速安装C语言的扩展依赖,从而提高Node语言的编译测试效率. 3月重点更新内容: 在阿里云上,越来越多的用户选择了CRP作为团队的持续集成和部署的平台.很多用户对我们提出多

百度资深敏捷教练:深度解析持续交付之全面配置管理

作者介绍 张乐,百度资深敏捷教练.架构师,Intelligent Software Development团队成员.超过13年项目管理和敏捷实战经验,曾任职于惠普.埃森哲等大型外企,负责大规模团队敏捷转型和工程效率提升,积累了丰厚的知识体系和实战案例.加入百度后,作为公司内先进软件工程方法和生产力的践行者.布道者,主导了百度云.百度金融.云安全等新技术产品的敏捷转型和DevOps实施,帮助团队从业务.过程.技术.组织和工具等多个层面建立起全面的持续交付能力.Gdevops全球敏捷运维峰会.TiD