前言

百度开放云(https://bce.baidu.com)是百度基于十五年基础架构核心技术积累推出的云服务,目前推出了14个云计算产品和9个大数据产品,并提供数字营销云、在线教育、物联网等10种解决方案。百度开放云安全、高性能、高扩展性的特点,可以帮助企业降低运维成本、提高生产效率和激发创新。

案例背景

开放云经过两年的快速发展,研发团队300多人,20多条产品线。随着业务快速发展和技术架构日益复杂,对研发交付能力不断提出更高要求,需要研发能非常快速构建出功能完善和质量稳定的产品。技术教练经过对研发过程的深度分析,发现在整个研发交付流水线上还存在较大的改进空间,包括整体测试周期、测试自动化程度、环境部署方式、运维自动化部署上线等方面,这些环节的进一步优化改善将大大的提高研发的交付速度和产品服务的稳定性。

如何优化改善?

确定目标:在保证质量的前提下将整体交付周期缩短50%。

改进思路

  • 基于改进目标将研发交付流水线分为"开发与测试"、"部署与上线"两个阶段分别实施改进。

  • 第一阶段引入持续集成方法改进"开发与测试环节":从分支切换到主干开发,在主干频繁的提交代码完成自动化构建,以尽早发现和消除代码缺陷,保证产品质量,缩短整体测试周期;

  • 第二阶段引入DevOps方法和技术,通过标准化和自动化部署过程,彻底打通部署与上线环节,并构建端到端自动化交付流水线,提升整个交付过程的效率以及产品服务质量的可控性和可靠性。

整体方案


1. 循序渐进,建设持续集成

  • 从分支开发切换到主干开发模式,降低分支管理难度和Merge成本;

  • 建立分级构建模型,搭建包括本地构建、模块级构建、子服务级构建、系统级构建、准生产级构建等多层次自动化构建,同时加强测试自动化覆盖率,从多个层次和多个验证角度建立起质量保证体系;

  • 强调团队习惯,包括增加代码提交频率、设置各级构建提交门限、制定Build Cop机制等,确保持续集成能够实施到位;

  • 从推广模式上,首先选取30%团队进行试点,在逐步成熟并取得阶段进展后,再向整个团队进行推广。在大规模推广过程中,实施分级管理和Mentor机制,统筹推进多团队整体改进,并通过建设CI Dashboard进行改进过程度量和监控,实现完整的PDCA管理循环。

2. 逐步深化,建设DevOps

  • 标准化、自动化部署过程,通过开发统一的部署工具平台,支持以相同的配置模式对从测试环境到生产环境的多种不同环境进行自动化部署和配置,提升各环境的一致性并降低手工操作时间和成本;

  • 建设自动化交付流水线,对整个交付过程建模,将编译/打包、各级测试、各级上线等阶段依次定义为多个Stage,每个Stage包含一系列并行或串行执行具体部署、测试任务的Job,从而实现全流程多级构建的自动触发和自动流转;在此基础上,增加对产品中多模块间相互依赖和触发的支持,从模块级流水线升级为产品及流水线;

  • 以交付流水线作为统一入口,提供给所有角色一站式服务能力,包括一键测试、一键发布、一键部署、一键回滚等功能,简化交付过程操作复杂度,实现人人运维;

  • 根据交付流水线数据生成价值流图,辅助以构建时间、构建完备性、构建稳定性等统计指标,进行整体进度监控和瓶颈发现,并通过版本依赖关系图进行回溯分析和人工干预,提升交付过程的控制力;


效果如何?

  • 通过深化持续集成、测试自动化和测试前置,测试周期缩短为原来的50%;

  • 通过统一自动化部署工具,向多个环境部署和发布耗时降低为原来的25%;

  • 从开发到上线的整体交付周期缩短50%,交付过程通过自动化流水线固化,过程标准化、可重复、可靠,同时提供快速反馈;

  • 整个交付流水线各阶段实现自动化,可根据设置自动化触发执行,并在关键质量控制节点增加了人工审批环节;

  • 流水线每个阶段实现自动化验证,预防有问题的构建进入到生产环境,紧急的线上修复也遵循整个流程,持续的进行回归验证,保证质量;

  • 整个交付过程进度可视化以及进行瓶颈分析,快速查看当前构建进度、定位阻塞环节、分析对后续发布影响;

  • 各角色基于统一自动化工具链紧密协作,从代码提交到发布过程操作简单,具备每日多次发布和故障快速回滚能力。

案例关键词:DevOps、全流程交付流水线、自动化测试、自动化部署、团队协作

博客转自:《"百度方法+"案例—从持续集成到持续交付 | 百度敏捷教练 》

[转载]"百度方法+"案例—从持续集成到持续交付的更多相关文章

  1. 【转】基于Jenkins实现持续集成【持续更新中】

    知识预览 持续集成 Jenkins安装 Jenkins插件 Jenkins配置 Jenkins备份与恢复 发布PHP项目 SVN 发布Maven项目 按版本发布 远程管理 War文件部署设置 任务 J ...

  2. 浅谈<持续集成、持续交付、持续部署>(一)

    谈谈持续集成,持续交付,持续部署之间的区别 经常会听到持续集成,持续交付,持续部署,三者究竟是什么,有何联系和区别呢?   假如把开发工作流程分为以下几个阶段: 编码 -> 构建 -> 集 ...

  3. 02: CI(持续集成)/CD(持续交付/持续部署)

    1.1 持续集成.持续交付 介绍   参考博客:https://www.cnblogs.com/cay83/p/8856231.html 1.传统交付 1. 传统软件的开发与交付的周期都很漫长,从需求 ...

  4. Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署

    一,引言 上一篇讲解到利用 Azure DevOps 将整个 Azure Web App,Azure Traffic Manager profile,Azure Storage Account,Azu ...

  5. 【进阶之路】持续集成、持续交付与持续部署(CI/CD)

    由来 记得7月份刚刚换工作的时候,中午和老大一起去吃饭,回来的路上老大问我:"南橘,CI/CD有没有研究过?" 我隐隐约约在哪里听过这个名词,但是又想不起来,秉着实事求是的态度,我 ...

  6. 基于Jenkins实现持续集成【持续更新中】

    持续集成 1.什么是持续集成:Continuous integration (CI)持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生 ...

  7. 【ZZ】谈谈持续集成,持续交付,持续部署之间的区别

    谈谈持续集成,持续交付,持续部署之间的区别 http://blog.flow.ci/cicd_difference/ 谈谈持续集成,持续交付,持续部署之间的区别 2016年08月03日 标签:beta ...

  8. 在TFS持续集成(持续发布)中执行Telnet任务

    Telnet是一种在因特网或局域网上使用虚拟终端连接,提供双向交互式文本通信设备的协议. 它是最早的互联网通讯协议之一.自1969年启用以来,已经经过了将近50年时间,在开放式的操作系统中拥有广泛的用 ...

  9. 持续集成、持续交付、持续部署、Jkens、git

    一  持续集成.持续交付.持续部署 1. 持续集成 持续集成指的是,频繁地(一天多次)将代码集成到主干.持续集成的目的,就是让产品可以快速迭代,同时还能 保持高质量.它的核心措施是,代码集成到主干之前 ...

随机推荐

  1. Vue.js多重组件嵌套

    Vue.js多重组件嵌套 Vue.js中提供了非常棒的组件化思想,组件提高了代码的复用性.今天我们来实现一个形如 <app> <app-header></app-head ...

  2. 【转】VC中的字符串处理

    http://hi.baidu.com/nmn714/item/ab8d2a96d0f2d6f228164727 貌似不少人刚开始做windows程序时都会纠结在字符串处理上,所以我把关于字符串处理的 ...

  3. shell 知识

    解压 tar.bz2文件 bunzip2 linux-2.6.13.tar.bz2 | tar xvf -

  4. 一次千万级别的SQL查询简单优化体验

    背景:从两张有关联的表查询数据,A表数据量1400万,B表数据量8000万.A与B通过ID逻辑关联,没有实际的外键.B表是后来扩展出来的. 问题:根据某个ID查询时超时,运行时跑不出结果. 原因:使用 ...

  5. 重制AdvanceWars第一步 -- 搞定地图

    首先来聊下高级战争吧Advance Wars,由任天堂旗下的Intelligent Systems开发的战棋游戏.初作诞生于GBA上,后来继续跟进了高战2黑洞崛,而后在下一代掌机DS上也出了三代续作高 ...

  6. [.net 面向对象编程基础] (16) 接口

    [.net 面向对象编程基础] (16) 接口 关于“接口”一词,跟我们平常看到的电脑的硬件“接口”意义上是差不多的.拿一台电脑来说,我们从外面,可以看到他的USB接口,COM接口等,那么这些接口的目 ...

  7. js中各种跨域问题实战小结(一)

    什么是跨域?为什么要实现跨域呢? 这是因为JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.也就是说只能访问同一个域中的资源.我觉得这就有必要了解下javascript中的同源策略 ...

  8. 一天一小段js代码(no.1)

    10000个数字中缺少三个数,编程找出缺少的三个数字. 算法实现: /*生成10000个数中随机抽掉三个数后的数组*/ function supplyRandomArray(){ /*生成含有1000 ...

  9. UStore-添加自定义工作流(JDF)到产品

    这里使用的是8.2版本.所有的帮助文档可以在可以看到: http://www.xmpie.com/uStore%20Help/uStore_Help_Page.htm 1.登录 首先,登录到ustor ...

  10. XMPie部署与创建过程 - 快速指南

    XMPie部署与创建过程 1PhotoShop.Indesign.VS2013关系.作用.使用 .1.1目的与过程 1. Photoshop负责导出cpkg文件. 1.1 动态性 如果你想要生成动态的 ...