前面几篇文章,我们介绍了非常基础的运维建设环节。如果我们想要这些运维基础建设发挥出更大的作用和价值,就需要针对运维场景进行场景化设计和自动化,让效率和稳定性真正 提升上来。也就是说,把基础的事情做好之后,我们就要进入效率提升的运维场景自动化阶段了。

在这一阶段,我个人的经验和建议是,首先要把持续交付做好。 为什么要先做持续交付?如果说我们完成了一些运维职责范围内的自动化工具,提升的是运维效率的话,那么,做持续交付就是提升整个研发体系效率的关键。 做持续交付的价值表现在哪里?

持续交付覆盖了应用的整个生命周期,涉及产品、开发、测试、运维以及项目管理等相关方面。从生命周期出发,自然就会牵出整个自动化的全貌,就会有从全局着眼的规划设计,这时 无论是在开发还是运维过程中存在的问题,都会完完整整地暴露出来。那么,应该以什么样的主线开展?各方应该如何配合?应该以怎样的优先级明确任务?这些问题就都清楚了。 同时,也避免了各个环节只把注意力放在各自职责范围内的事情上,而忽略了整体的配合。所以,做好持续交付,对于整个研发体系意义重大。

我们面临的实际场景是怎样的?

我们知道,随着业务复杂度的升高,不管是分层架构,还是微服务架构,都会带来一个最明显的变化,那就是应用数量增多,有时甚至多达几十个、上百个。不同的应用就有不同的代码、依赖和配置,为了协同多应用之间的在线发布,我们还要做到服务能够平滑地进行上下线切换。同时,为了最大限度地降低发布风险,我们还需要进行多环境下的验证,以及上线后的灰度策略等等。

应对这一切,如果只是手工维护,或者利用简单的工具脚本进行维护,都不能保证正常运作。这个时候,我们必须有一系列的流程、机制和工具链来支持和保障。

由杰斯·赫布尔(Jez Humble)、戴维·法利( David Farley)编著,乔梁老师翻译的《持续交付:发布可靠软件的系统方法》(Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation )这本书,针对持续交付的过程、方法和指导建议几个方面做了非常详细的描述。我向你强烈推荐这本书,不过, 这本书的内容并不仅仅针对于微服务架构。

接下来我就分享如何把持续交付的理念和实践相结合,讲一讲在实践过程中,做好持续交付最关键的几步是什么,以及具体应该怎么做。

什么是持续交付?

我们现在经常会接触到这些名词,比如持续交付、持续集成、持续部署、持续发布、DevOps和敏捷开发等等。大多有关持续交付的分享或文章中,这些名词经常会同时出现。它们 之间到底有什么区别?我自己之前也弄不清楚,直到看到乔梁老师的这张图。

这里我重点解释一下持续交付这个概念,通俗地说,持续交付代表着从业务需求开始到交付上线之后的端到端的过程。后面我们会针对这个过程的关键环节进行分享。

受篇幅所限,其它名词就先不作过多解释了,你可以看图自己体会,都不难理解。后面针对某些概念我们还会提到。

持续交付的关键点

可以说,这一部分也是我们后面将要分享内容的提纲。

从前面那张图来看,做持续交付需要端到端考虑,同时还要有一些非常关键的准备工作。我把这些工作大致分为以下几个部分。

1. 配置管理

这一部分会利用到我们前面讲过的标准化和CMDB打下的基础,同时还会有更大的外延,比如环境配置、代码配置以及依赖管理等等。

配置管理是非常关键的基础工作。有一点值得注意,那就是标准化是一个持续的过程。我们不太可能在一开始就把所有运维对象、属性和关系全部都考虑清楚,面面俱到是不太现实 的,所以,一定要具备标准化的意识,在开展运维工作的过程中,持续不断地用这个思路去标准化新出现的对象。先标准,再固化,然后自动化。

2. 需求拆解

需求拆解这个工作跟业务需求部门和业务开发有更直接的关系。在这里,运维需要做的是,明确需求拆解的粒度和我们最终发布上线的粒度相匹配。

3. 提交管理

需求拆解完成后,就进入到开发阶段,开发完成后向代码库中提交代码,这个过程中代码分支的合并策略选择就是提交管理。

4. 构建打包

这一部分是指将提交后的代码编译成可发布的软件包。

5. 自动化测试

自动化测试包括功能测试和非功能性测试。对于运维来说,会更注重非功能方面的特性,所以后面我会着重讲非功能性相关的测试环节。

6. 部署发布

这一部分是指发布到不同的环境,如开发环境、预发环境、线上Beta以及线上全量环境。针对不同的环境,发布策略和注意事项也会不同。

以上是一个完整的持续交付过程中最重要的几个环节,后面我们分篇进行详细介绍。

从我自己的实践经验来看,配置管理、提交管理、构建和部署发布是持续交付的重中之重,是关键路径,是从开发代码开始,到发布上线的必经之路。当时,因为这几个环节出现了问题, 不能解决,运维同学经常做手工发布,这样效率就跟不上,还经常出现各种问题。

后来,我们就是先从这几个环节入手,把阻塞的问题解决掉,然后在这个主流程上不断增加外围能力,让整个流程的功能更加丰富和全面。整个系统也从原来的只具备持续部署发布功能的平台,逐步演进为具有持续交付能力的平台。由此可见,我们实现持续交付的过程,也不是一蹴而就的,而是在摸索中逐步演进完善的。

最后,给你留两个思考题。
1. 先放下持续交付的概念,你所理解或经历的从开发完代码到发布到线上这个过程中,会有哪些环节?和我列出来的这几部分是否有相同之处?

2. 持续交付是谁的持续交付,它的主体是谁?或者有哪些主体?

欢迎你留言与我讨论。

如果今天的内容对你有用,也欢迎你分享给身边的朋友,我们下期见!

持续交付知易行难,想做成这事你要理解这几个关键点相关推荐

  1. 《赵成的运维体系管理课》学习笔记(1)——持续交付

    16 | 持续交付知易行难,想做成这事你要理解这几个关键点 什么是持续交付 首先要把持续交付做好. 做持续交付就是提升整个研发体系效率的关键. 持续交付代表着从从业务需求开始到交付上线之后的端到端的过 ...

  2. 持续交付:价值主张​

    过去十年中,一个划时代的改变就是:基于Web的业务模式对传统企业业务模式的冲击.亚马逊就是历史最长,也最明显的例子之一,而越来越多的公司(从航空到金融服务)开始依赖软件打造其竞争优势了. ​依靠软件来 ...

  3. 工作中我目前想做的事的清单

    结合我一直维护的系统,这几年一直想改进,但是红外.预研...各种建设不得闲,现在有点闲了,精力又集中在搭建和完善逐束团3D,清单罗列一下,欢迎小朋友们来认领练手,这些改进未来可照搬在新光源上,结合发的 ...

  4. 乔梁老师的持续交付七巧板和三步法思维实践

    乔梁,<持续交付>中文版译者,腾讯高级管理顾问,"轻敏捷"方法创始人,持续交付先行者,映客.卷皮.墨迹天气等多家移动互联网公司高级管理顾问,也为魅族.上汽.平安等不同类 ...

  5. CI/CD笔记:《持续交付:发布可靠软件的系统方法》

    <持续交付:发布可靠软件的系统方法> 前言 软件交付的问题 配置管理 持续集成 测试策略的实现 部署流水线解析 构建与部署的脚本化 提交阶段 自动化验收测试 非功能需求的测试 应用程序的部 ...

  6. 《持续交付》读书笔记

    读乔梁先生<持续交付2.0>摘要,仅供学习交流 一.持续交付2.0 1.1 软件工程发展 1.瀑布软件开发 传统的瀑布软件开发模型每个阶段都花费属于的实际那,需要花费大量的经历确定需求的范 ...

  7. 学python多久能上线部署网站_从开发到上线,实战持续交付

    「开发者最佳实践日」是由七牛云存储发起并联合各方小伙伴为开发者举办的系列技术沙龙,关注开发者在实际应用中可能遇到的技术问题.致力于为勇于创新的开发者们提供行业内最前沿最热门的技术干货,以技术驱动应用创 ...

  8. 微服务架构实战项目Serverless的持续交付与架构案例

    Serverless的持续交付 架构图如下: 在这个架构中,我们采用了前后端分离的技术.我们把 HTML,JS, CSS 等静态内容部署在 S3 上,并通过 CloudFront 作为 CDN 构成了 ...

  9. 以主干开发作为持续交付的基础

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 早在他们的重要著作<持续交付>一书于2011年发布之前,Dave Farley和 ...

最新文章

  1. 数字图像的表示与类型(学习篇)
  2. 【会议】2009-3-23
  3. Java-String的常用方法总结!
  4. ji计算机一级题库,全国计算机等级考试一级题库0l0ji.doc
  5. Golang Web入门(4):如何设计API
  6. Web前端入门学习之JS基础知识梳理汇总
  7. C++串口通信API方式
  8. Python入门--文件对象的常用方法,write,read,readline
  9. Flutter高级第6篇:事件广播 、事件监听
  10. 记在thinkPHP中一个创建模型的小错误
  11. Ample Sound Ample Guitar Metal Hellrazer Mac - 虚拟九弦金属吉他
  12. 生产排程系统_生产排程管理生产流程管理系统软件规划
  13. Vue富文本编辑器(iceEditor)集成
  14. EXCEL实现按照奇偶行填充
  15. 【Eclipse】更改 Eclipse 的字体和图标大小
  16. cpu之ALUSrc_Reg1
  17. Create an undirected graph from the adjacency list
  18. 滴滴2018秋招编程题
  19. Win32常用API讲解
  20. 福昕阅读器更改白色背景为保护色(2020-11-15)

热门文章

  1. 16-SpringBoot之Redis(三)——Redis事务机制
  2. 查询选修‘C语言’课程的学生(MSSQL)
  3. 有哪些时候4090显卡训练模型的电源
  4. C#实现基于ffmpeg加虹软Arcface的人脸识别demo
  5. webpack优化之HappyPack实战
  6. java json keyset_Java JsonObject.keySet方法代码示例
  7. Sublime Text 3 Build 3176 License
  8. 网络系统安全——MS15_034漏洞利用与安全加固
  9. kswapd0病毒查杀
  10. kswapd0进程在CentOS下CPU占用率过高