前言

百度开放云(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. 关于普通定时器与高级定时器的 PWM输出的初始化的区别

    不管是普通定时器还是高级定时器,你用哪个通道,就在程序里用OC多少.比如CH3对应OC3 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  TIM_ ...

  2. javascriptone

    var start=Date.now();document.write("<h1>This is a paragraph.</h1>");function ...

  3. 对文本行按特定字段排序(前N个字符或后N个字符),TCPL 练习5-17

    The C programming language 的关于文本行排序的问题有很多种要求的方式,在对每行的字段排序方面,最简单的是例如对前N个字符或者末位N个字符进行排序,更高一点的要求是,对特殊符号 ...

  4. 中国大学MOOC-陈越、何钦铭-数据结构-2016秋期末考试

    判断题: 1-1 N2logN和NlogN2具有相同的增长速度. (2分) 1-2 对一棵平衡二叉树,所有非叶结点的平衡因子都是0,当且仅当该树是完全二叉树.(2分) 1-3 无向连通图所有顶点的度之 ...

  5. Webstorm 2016内置web服务器配置

    运行three.js的官方的例子.本来想用IIS来运行,运行不了.所以用webstorm,用鼠标右键的方式,来运行,如下图 但是有一天,我把IIS配置好了,可以在IIS中运行了(只是把build文件夹 ...

  6. 开源库Magicodes.WeChat.SDK总体介绍

    目录 1    概要    1 2    主要特点    2 3    架构图    8 3.1    构造器——WeChatSDKBuilder    8 3.2    函数管理器——WeChatF ...

  7. .Net平台下,分布式文件存储的实现

    遇到的问题 对于Web程序,使用一台服务器的时候,客户端上传的文件一般也都是存储在这台服务器上.但在集群环境中就行不通了,如果每个服务器都存储自己接受到的文件,就乱套了,数据库中明明有这个附件的记录, ...

  8. 【Bugly技术干货】那些年我们用过的显示性能指标

    Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言: 注:Google 在自己文 ...

  9. 学习Scala01 环境安装

    Scala是一门运行在jvm上的多范式语言,作为一个java程序员,使用Scala来写写程序,既不用担心会没有java强大的库支持,又能快速地写出简短强悍的代码,除此之外scala还为我们提供了强大的 ...

  10. Springlake-02 权限&文档设置&Role设置&Folder设置&登录

    1. 权限 有3个默认的权限用户: 1.System Owner so 管理员权限全部:Type Setup; Group Setup; Form Setup; Role Setup; Share R ...