2017年5月9日,云效平台资深研发工程师向禹通过直播分享了《持续集成与持续交付实践之路》。他从云效背景、云效方案、云效价值三个方面进行了分享。他主要分享了持续集成持续交付的解决方案和案例,并且对大型系统如何实现持续集成、持续交付、进行产品迭代发布进行了详细介绍。

以下内容根据直播视频整理而成。

云效背景——阿里巴巴《持续交付》之路

大应用下的交付

在七八年之前,阿里巴巴的B2B一直沿用瀑布的模式来进行项目管理,当时已经感觉到瀑布模式对应用持续快速的发展产生了很大的影响。并且当时很多的应用都是以大应用的方式来开发的,一个应用可能有几十万行、上百万行代码量,如果此时进行小的功能点的修改会比较麻烦。改了几行代码,花费几个小时进行编译打包,发布到测试环境上去,运行全网的自动化回归(积累了两千多个自动化脚本,总共几万行)也非常耗时,降低了开发效率。所以,当时开始准备把大应用进行服务化的拆分,将大应用的逻辑拆分成了会员中心、产品中心、订单中心、交易中心等服务化模块,每个模块下面又有微服务来支撑。

做完第一步改造之后,又遇到一些问题,最明显的是环境上的问题。每一家公司环境管理的方式是类似的,都会划分为开发环境、测试环境、集成环境以及线上的生产环境。微服务化之后,在开发环境下,由于应用变多,调用链路变得更加复杂,很难保证整个环境中所有应用的稳定性。问题难以排查,修改程序之后,很难判断是应用出现问题还是链路出现问题。在集成环境,为了保证稳定性,规定了每周的交付窗口时间,将所有项目代码合成到集成分支上,编译打包部署到集成环境中,运行全网自动化回归脚本。如果出现问题,排查比较麻烦,首先判断是哪一个应用引起的问题,然后再细分到项目组进行排查,修改后重新交付测试。

既然现在已经是微服务了,是否可以跳过集成环境,在开发测试环境将应用完善测试好?经过尝试发现,即使在开发测试环境将某个要发布应用的所有功能测得再详细,也很难保证应用上面的链路和下面的链路的业务逻辑都是正常的。

自动化

如果仅仅通过开发方式的转变是没有办法很好的完成持续集成、持续交付的理念。我们应该创造一个持续集成、持续交付的自动化平台来保证在每个环节里面效率的提升,以及整个链路的打通。

上图是我们在平台上解决的核心问题:并发项目配管方案,在并发项目很多的时候需要进行代码分支的管理;持续部署方案也是需要解决的核心问题;持续验证方案,在持续部署之后要快速进行验证,如果用手工的方式是不现实的;通过持续部署和持续验证达到持续交付的目标;为了让各个团队更好的适应角色的变化、使用平台来提高效率,提出了落地使用推广方案。

云效方案——核心解决方案内容

针对需要解决的问题,我们所建设平台核心的原则是核心化、流程化、自动化,希望能够建立持续部署的流程、代码管理的流程,通过自动化的方式实现出来。在上述基础上,云效平台建立了配置管理、持续集成、持续交付等相关子系统。通过这些子系统,创造了可靠、可重复的交付流水线。此外,与项目管理进行结合,开发的效率很好的沉淀到了平台上,在平台上建了与项目管理相关的一些子系统,将其数据打通就能达到业务和产品的相互促进。多个角色的团队都会在平台上用相关的系统来进行相互工作上的协作,所以对组织和团队的协作也产生了促进作用。云效平台在内部是部署在专有云平台上,对于托管的应用支持EDAS/Dubbo分布式服务化架构、SpringBoot微服务架构、Docker容器化架构。

并发项目配管方案——SCM管理

并发项目配管方案即项目分支管理方案。很多公司在开发一个项目的时候会首先由相关的PM或者运维人员拉出来一个分支交给开发人员。为了简化上述过程,在平台上提供了开发人员直接拉取分支的功能。如上图所示,项目1和项目2同时进行开发,分别拉取了V1.0的分支。如果项目1提前开发完成,就会触发提交集成的操作,会把项目1最新的分支代码重新拉出来一个集成分支,把主干代码合成到集成分支中,针对集成分支进行编译打包,自动部署到集成的测试环境中。在集成环境运行云效的测试用例,如果没有问题就合并回主干。

持续部署方案-环境管理

每个公司都有相同的环境建设方式,包括开发环境、测试环境、集成环境。为了规避开发环境不稳定的情况,摒弃了各种环境的概念,在云效平台上划分为了公共环境和功能环境。公共环境可以认为和线上服务的环境一致,是由线上同步回来的,不需要人为手工参与部署。测试时,如上图需求1,每个项目组根据项目开发的应用在云效平台上申请一台服务器,通过云效一键部署的功能把应用部署到服务器上去,如果需要调用其他服务器,则通过服务化路由的方式路由到其他服务器上。针对每个项目组来说,他们都可以认为自己有一个独立的、供他们使用的测试环境,互相之间没有相互的干扰。对于服务化自动路由,各个系统间相互调用的方式有HTTP、RPC、HSF、Dubbo框架等,使用HTTP的话可以利用本机host绑定达到路由效果,可以使用云效平台自动托管;如果使用Dubbo和HSF,则有一些注册中心和路由规则,可以在本地部署服务器上直接生成HSF的路由文件,动态改变服务的路由。

分层自动化

在测试环节,倾向于认为没有某一种的测试方式能从效率、质量达到一个很好的平衡,涵盖所有测试的业务逻辑。如果把所有的功能都通过UI自动化实现的话,UI自动化的创建、维护成本很高,稳定性也有一定问题。建议在不同的业务层次使用不同的、适合的测试环境。在方法层面,检测方法是否有问题,可以利用单元测试来进行。接口则可以通过服务化接口测试来涵盖,再往上更长流程的业务逻辑可以通过界面自动化测试来实现。很少一部分的测试场景通过自动化的方式是没法实现的,只能通过手工的方式来实现。

单元测试

在分支上进行提交的时候,每一次后台都会及时检测到触发提交后针对最新代码的编译、单元测试、代码扫描。平台扫描的结果会及时通过邮件反馈到开发人员,相关的数据也会沉淀到系统上。在云效平台上,阻塞问题是最严重的问题,通过提示信息可以方便开发人员及时进行相关排查。

服务化接口测试

在云效平台上,所有的自动化测试都希望不写代码,直接在页面上配置,通过最直观的方式进行。接口测试方面,如果是HTTP接口,则会直接在页面上输入需要测试接口的地址、入参、出参的校验规则;如果是Dubbo或者HFS接口,则需要写单元测试用例启动一个容器才能进行相关的测试。为了减轻写单元测试的工作,在云效平台上,可以解析到某一个jar包里的接口,只需要指定针对Dubbo接口往哪一个IP服务上发送相关请求,平台会自动生成相关的一些测试用例,把入参进行传递,把出参进行校验。

云效价值——实际效果与客户案例

在阿里巴巴内部,云效平台是从2012年开始建设,当初开发测试的配比大约是3:1,到2015年提高到了6:1,目前已经接近8:1。由于业务在持续快速的发展,在平台的保障下,历年故障数有明显的下降,集成验证发布耗时也有显著缩减。有了平台上自动化工具的保证,50%的小需求不需要进行测试。也没有了发布窗口的限制,随时可以发布。

对于外部客户来说,现在使用云效的客户也有不少,比如众安保险、五矿电商、红岭创投等,主要使用的是环境部署、自动化集成、自动化用例的建设,大大提升了企业研发效率。

产品迭代发布如何更快速?阿里持续集成与持续交付实践之路全解析相关推荐

  1. 【linux】持续集成与持续发布CICD

    文章目录 DevOps的发展历程 原始开发时代 瀑布开发时代 敏捷开发时代 精益开发时代 DevOps 版本控制概念 什么是版本? 什么是版本控制? 常见的版本控制系统及比较 git的安装 git应用 ...

  2. Web系统版本更新与迭代方式——持续集成与持续部署(Python Django框架)

    一.持续集成与持续部署 在软件工程中,CI/CD是指持续集成和持续交付或者持续部署的组合. CI/CD通过构建应用程序.在测试和部署中实施自动化,从而在开发团队和运维团队之间架起一座桥梁,让项目能够更 ...

  3. OPPO粟俊娥:OPPO研发云持续交付实践之路

    嘉宾 | 粟俊娥   整理 | 孙正印 出品 | CSDN云原生 2022年5月17日,在CSDN云原生系列在线峰会第5期"DevOps峰会"上,OPPO研发云产品负责人粟俊娥分享 ...

  4. 测试开发必会:正确理解持续集成和持续交付 CI/CD

    正确理解并掌握持续集成和持续交付(CI/CD)是当下测试和质量保障相关同学的必备技能.本文作者为霍格沃兹测试学院特邀嘉宾,资深技术专家蒋刚毅,原文首发 TesterHome 社区,标题为<持续交 ...

  5. 为什么要持续集成与持续部署

    DevOps.持续集成.持续交付.持续部署.敏捷等词语大家应该都耳熟能详了,说到底就是快速交付价值,从工程上.管理上.组织上.工具上来提高效率,打造可靠的.快速的产品(项目)交付过程.本书将围绕项目管 ...

  6. 持续集成与持续部署(一)——核心概念之持续集成、持续交付、持续部署

    持续集成与持续部署(一)--核心概念之持续集成.持续交付.持续部署 5-4 持续集成与持续部署 课程介绍 那些大厂们,天天DevOps.持续集成的?到底在讲些什么?这堂课来给你揭开持续集成与持续部署的 ...

  7. ci持续集成工程师前景_不要忽视持续集成(CI)/持续交付(CD)的13个优势

    原标题:不要忽视持续集成(CI)/持续交付(CD)的13个优势 持续集成(CI)/持续交付(CD)是现代软件开发周期的基础,人们需要了解持续集成(CI)/持续交付(CD)和其管道实施的所有好处. 在传 ...

  8. 【Jenkins】持续集成、持续交付与持续部署

    持续集成.持续交付与持续部署,都是软件开发过程中的很好的实践. 一.持续部署 装修厨房 全部装好之后发现灯不亮,电路有问题:冷热水装反了,管路有问题.这些问题要解决就必须把地砖.墙砖拆掉--一个环节有 ...

  9. 持续集成和持续部署CI/CD简介

    持续集成 简介 持续集成(Continuous integration,简称CI)指的是频繁地(一天多次)将代码集成到主干. 持续集成的目的就是让产品可以快速迭代,同时还能保证高质量,它的核心措施是将 ...

最新文章

  1. hihoCoder #1047 Random Tree
  2. AI和大数据如何落地智能城市?京东城市这6篇论文必读 | KDD 2019
  3. AI可以在游戏里称霸,但是解决现实问题太难了
  4. 数据结构——HDU1312:Red and Black(DFS)
  5. 工业级以太网交换机产品特征及应用案例介绍
  6. Java私塾的一些基础练习题(一)
  7. 用Python告诉你,为什么宇宙的尽头是公务员!
  8. 线程池框架-Executor
  9. ssh链接数设置问题
  10. Unity3DGUI:刚体碰撞及消息传递
  11. 管理感情:精力有限,要么干活,要么内斗
  12. 用nodejs框架Ghost快速搭建自己的网站
  13. 用SIR模型处理新冠疫情
  14. 傲腾readyboost_从提示框:自动耳机音量调节,Compact Windows ReadyBoost和安全电话充电...
  15. 那些选择网络工程的女生们,后来都怎么样了?
  16. 20210725个人周复盘
  17. RGB 到HSV转换 摘自wiki百科
  18. 最全!互联网大厂的薪资和职级一览
  19. 正在使用计算机突然停电怎么办,电脑突然断电怎么办?电脑突然断电开不了机解决教程...
  20. 便携设备 android,mini型便携Android通讯设备——与外围硬件沟通桥梁

热门文章

  1. fortigate的RADIUS域用户的组认证为SSL×××用户(上)
  2. 《Java编程思想》读书笔记(14)
  3. (八)java版spring cloud+spring boot+redis多租户社交电子商务平台 -SSO单点登录之OAuth2.0登录认证(2)...
  4. 手把手教你使用 VuePress 搭建个人博客
  5. MySQL内核月报 2014.09-MySQL· 捉虫动态·auto_increment
  6. 博客园使用攻略之如何添加自己的js文件
  7. 【转】jquery文件上传插件uploadify在.NET中session丢失的解决方案
  8. C语言的数据类型→浮点型数据
  9. Lanecat网猫案例小议
  10. 区块链软件公司:区块链技术的应用