前言

百度开放云(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. java-代理模式及动态代理

    代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在考虑到性能或安全等因素的情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. ...

  2. linux添加新LUN,无需重启

    linux添加新LUN,无需重启 在给存储增加新的Lun时,在linux下一般是: A.重启操作系统B.重启HBA卡驱动 1. kudzu添加完新硬盘后,运行命令kudzu重新扫描新的硬件设备,类似a ...

  3. mysql 备份软件 Xtrabackup 的 xtrabackup_binlog_pos_innodb和xtrabackup_binlog_info 文件区别

    今天在操作 innobackupex 的时候,执行 change master to 的时候发现  xtrabackup_binlog_pos_innodb   xtrabackup_binlog_i ...

  4. 需要知道关于struct的一些事情

    前言 重构代码的时候,会遇到长参数的方法,此时就需要使用“引入参数对象”来封装这些参数.大多数时候,这些参数都是简单类型,而且所有参数的值占用的空间也不是非常的大,此时使用对象真的好吗?对象的特性是堆 ...

  5. 源代码版本管理与项目管理软件的认识与github的注册

    源代码版本管理软件: 主要有:svn,cvs,hg,git,VSS 这些工具主要是一种记录代码更改历史, 可以无限回溯, 用于代码管理,多个程序员开发协作的工具.Perforce,StarTeam)- ...

  6. [异常解决] virtualbox从.VDI备份文件新建/恢复虚拟机(包括恢复各个备份节点)

    一.前言: ubuntu上的virtualbox中的虚拟机如果关机不当会导致整个虚拟机坏掉,而且采用各种debug方式都难以让它重新启动.这时你只能用之前备份的各个VDI文件来恢复系统了.还有另一种场 ...

  7. [每日电路图] 1、基于AT89C52单片机最小系统接口电路【转】

              come from:http://www.21ic.com/dianlu/basis/interface/2015-04-21/621607.htm AT89C52是美国Atmel ...

  8. [51单片机] 以从0开始做4位8段共阴数码管3461AS驱动谈细节决定高质量DIY

    目录 1)问题产生 2)失败尝试 3)最终方案 4)使用方法 5)知识共享 1)问题产生 在上一篇“以PWM控制直流电机为例建一个简单的51工程框架”中已向大家介绍了一个封装好的8位8段数码管的驱动( ...

  9. JavaScript正则表达式下——相关方法

    上篇博客JavaScript 正则表达式上——基本语法介绍了JavaScript正则表达式的语法,有了这些基本知识,可以看看正则表达式在JavaScript的应用了,在一切开始之前,看看RegExp实 ...

  10. Windows进程通信 -- 共享内存(1)

    共享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信.因为是通过内存操作实现通信,因此是一种最高效的数据交换方法. 共享内存在 W ...