打造易于落地的DevOps工具链(附PPT还送新书)

简介:

主题简介

1、DevOps现状

2、传统企业DevOps案例

3、DevOps工具链落地之路

5dcc5cb1821ee65ff0638a979ea38bf321161771

上图是做持续交付需要掌握的工具。以前研发这一块用到的技术比较多,现在可以看到,如果要做微服务的部署,运维要掌握的技能是越来越多。这里面比较有意思的是研发与运维的博弈,如果你的运维能力跟不上,就会引起研发的吐槽,觉得你支持得不够好,他就会往后推自己的DevOps工具链,所以研发与运维之间会有博弈在这里面,是一件挺有意思的事情。

DevOps现状

6018fb3f337aac15d97a0c5367f4d76b0a2f20f2

从全球的角度来看DevOps的现状,上图是17年Puppet Lab发布的数据,可以看到,占最大比率的是在北美,因为硅谷这块有大量的DevOps工程师在里面,但亚洲只占到全球的10%,今年我相信这个数据肯定要大很多。

从薪资的角度来看,Stack Overflow网站做了一个统计,从全球调研了6万名工程师,排名第一的大家肯定没有想到,是DevOps专家,第二是机器学习专家。如果你是做DevOps的,那你可以给领导看一下是不是应该涨工资了。

62360f77353fd6df653203d90567014354300a7d

要评价企业的IT效能,部署频率高效的是一天部署多次,低效的是一个月部署一次来算的。从代码提交到上线,这个时间概念很重要,大家可以自己内部去收集一下数据,如果是小于一小时,那就相当超前了;然后是故障恢复率,如果小于一小时,也说明是高效能的企业。

5da4453b1f26128697f2da0facc58cef313544b5

从上图可以看到,黄线是高效能的团队部署频率,从16年到17年,它的部署频率是越来越高,黑线的低效能团队则没有什么变化。但是低效能的团队从16年到17年,它部署系统的恢复时间越来越长了,这是因为现在业务压力越来越大,一次性上线的东西越来越多,交付的东西变多了,就肯定会出问题。这个数据是公开的,在网上可以搜得到。

传统企业DevOps案例

398c0881b0f83bdbbf2d094e122efd18dc70f40b

传统行业,比如说ING,是一家非常超前的公司,13年开始就做DevOps,所以DevOps不是说落地,而是一个很长时间的旅程。他们600人的研发团队,是很难管理的,13年的时候他们就是手工来做,现在完全达到了自动化的流水线交付方式。德国工业制造4.0的概念对我的影响很大,因为交付方式已经发生了变化。在工业4.0的流水线里,人与人之间是不说话的,他们怎么去协作?完全依赖系统,每个人的工作台上有一个大屏幕,屏幕会把在他前面的所有交付信息呈现出来,前面发生了什么事情、有什么需求、下一个环节要发到什么地方……所有软件工程和现实中的工业工程的理念是一样的。

192a6ddbf97b574cfb9c098fb1b3e838bac54322

上图是ING目前所用的工具,可以看到非常多编排和检查的工具,一个团队很难管理这些东西。交付方面也有不同的部署工具需要支持,这样就带来一个什么问题呢?开发团队想用的工具,运维团队支持不了,那开发就说我可能不需要运维支持了,因为申请一个Jenkins机器跑测试,到运维这边发账号过来需要一个星期,但是开发可能等不了这么长时间,所以开发会考虑自己搭一套,可能半天就搭好了。这样会导致一个什么情况?

2893b5350d81de204e5ce02026d4859f75e00ca0

每个团队自己维护自己的交付流水线、自己运维,这时运维做的事情就很被动,这个研发要这样部署,那个研发要那样部署。这样运维想从后往前推交付规范,是根本推不动的。

b2f7d1bad6f907e7e709b2b657791b04b9b3532e

ING的解决方案就是,不改变开发现有的流程,还是让你去用,只不过让你来用运维团队的工具,把账号、权限等设置好,之前怎么做的还是怎么做。你可以看到这个时候运维的能力和价值就体现出来了,不光是运维你的应用,还要把前面的工具管理起来,这是运维从后往前推的成功案例。

其实研发也不愿意去管这些工具,他们每天压力很大,有问题还要每天去重启。所以运维做的这个事情是价值很大的。管理工具现在还不够,ING内部还有一个社区,他们会邀请一些团队上来做一些实践,比如说同种类型的,会给你列出来怎么做,然后其他团队来复用这个流程。这样是一种见效快、对业务改造少的方式,不管用什么语言,都用这个方式来做。他们落地这个方案,所有的服务都会统一管理。

f2694ef9027e6240d15af9adda6128b181420750

打通整个过程也比较直接,因为这些开源工具都比较支持LDAP打通认证,它们对密钥的安全要求比较高,所有的密钥通过Vault去进行加密存储。回到公司的角度来看整个流程,每个业务团队看到的流程都是一样的,代码扫描,把这些扫描的结果放到二进制里面,再做后面的东西。银行业对这个要求比较高,他们也有一定的需求。最后总结的是,ING DevOps落地大概有4年的时间,发布频率每个月达到12000次,但是减少了50%的线上发布事故。

ba0f9a65800d9007d363fc0895dee4700ba9aebd

美国的数字化银行CapitalOne的报表工具Hygieia也是很出色的,他们的痛点也是从传统开发方式转型,用5年的时间做了这个规划,实现每天发布4次。他们有很多的测试开发,从手工测试的角度变成写case、写自动化脚本的角色。所以他们从手工部署慢慢转型变成了自动部署,也有公有云的一些服务。他们会设置很多质量关卡,比如说用Sonar进行静态分析,这个也是开源工具,像腾讯也会使用Sonar去扫每个人提交的代码。

a433eeecfabd3d647450e39cfd3fb818ca7323ed

他们开发了基于持续交付工具提供的报表,提供了软件交付生命周期里面的一些可视化页面,比如说频率、代码、从构建到上线的一些数据化的指标,都是通过这个大屏显示出来。这是开源的,大家可以去安装测试一下,也是JAVA开发的。它能收集各个工具的数据,基于这些数据做一些查询、做报表的展示。CapitalOne在5年之内实现了刚才的这些转型,所以一个银行能做到这种以社区为中心、能够推动这种自主研发能力是非常难得的。

cc2be61635aee8eb3d4097ee7f393cbbe4b1df07

国内一个比较大的银行最开始是用FTP管理二进制包,这样做有很多痛点,研发的部分在不同的地点,各个中心很难协同。比如说你的包比较大,那达到50Gb/s时基本就挂了,所以要经常维护。首先评估,用一个专业的工具去管理起来,还有镜像的实时分发。使用Artifactory之后,可以实现持续交付,根据环境,每个环境有一定的仓库权限。现在互联网上有大量的开源软件漏洞,公司内部要提供一个统一受监管的仓库,不是什么包都可以直接下载。

DevOps工具链落地之路

那么,怎样迈出DevOps的第一步、用一些工具去做公司内部的实践?我接下来将分享一些工具链落地的经验。

b972478c3d6a1e7b4a8c99ff5faa604e7db5f3a9

代码和需求要进行关联,关联之后才能看到需求从代码提交、需求创建、测试再到上线这个平均时间是多少,还有就是提供给运维部门包相关的信息,以前拿到这个包什么都不知道,这个包解决什么问题和需求都不确认。如果把代码提交时把需求ID带上,就可以用Jira-Jenkins插件把Jira信息收集起来。Artifactory上面会有一个记录,是可以点到一个内容上面去,同样的数据,用其他的管理工具也是可以做到的。

6c95f1b014e5745c7cf7b6dee7b6ed0d915228a8

上图是很多大公司的痛点,公司内部有各种各样的私服,需要独立维护,配置权限、高可用、容灾备份、配置管理,同时你的部署脚本要对接各种私服,难以标准化你的CICD流水线。

001e86400eaa8f0c870afcc5c952ac4574bb44b3

第一步应该把这些进行统一管理,在构建的时候统一存在一个地方,这样有什么好处呢?以前需要指定版本去发包,现在可以让机器自动地找到这一次适合发包的一个最新版本。这也是工业生产线的一个概念,京东、亚马逊的物流都是机器人在送包,现在京东的无人车已经送到大学里面了。

f46c13a63766d523d19d9188475eddc4e1f9a6b1

以上这个流程是单团队实时交付的一个模型,实现的是自动化交付的流程。我建议大家可以根据自己企业的情况,在公司内部画一个这样的图,看看自己公司是什么样的状态。在上面的研发构建代码之后,做代码合并,合并到主干做一个构建,需要把这些信息记下来。比如说需求的ID、构建的代码地址、单测是否过了,还有覆盖率也会集中在这个上面。

把你的包上传到二进制仓库,如果通过单元测试,测试会收到通知,进行测试环境的验证,验证通过了,会记录通过的元数据到包上。可以手动,也可以自动化,测一些兼容性接口。很多工具的测试接口,可以把它的结果分析出来,再写到你的仓库里面。这样做之后,开发、测试及运维之间无需沟通交流。之后我们再发布到新的测试环境,模拟的一个生产环境去测试,同样这些测试的信息,手工的测试覆盖率是70%,也写在这个包上。最后运维拿到这个包,会拿到测试团队的一个评价,是不是能够上线,之后运维用自动化脚本把包放到生产环境。

这是单团队交付的一个流程,通常这个流程会配合工具来调度,这里面包含了很多自动化的步骤,当然也支持人工的步骤,很多的环境是需要人工的,比如说审批、审核测试。

4ac031dee252748e27cab5108af28fadbf885b04

从二进制包的角度来看,Jenkins构建的时候,应该是统一下载受信任的第三方包,不应该是从多个的文件夹/私服去拉取依赖包,保证每个人提交的时候,依赖都是一样的。避免同一个版本,有的用1.0有的用2.0。测试环节的数据都是写在交付件上的,会根据拿到的这些数据进行自动化的测试环境的发布,通过了之后,会升级到生产环境仓库,同时可以自动触发生产环境的发布,减少手工部署环节。

所以在公司内部,我们运维团队就是定义这个质量关卡。流水线落地的时候,可能研发团队不愿意配合,所有最开始的标准不能定得太高,可能覆盖率最开始只有20%,没有关系,就从20%开始。雅虎花了一年时间,把单元测试从0上升到90%。

从二进制的交付角度来看,交付流程里会记录所有的测试结果,这是流水线里的信息共享,打通研发测试信息沟通的一个屏障,打通部门墙。这个事情是很难的,但是我们可以从信息系统上去做信息的分享。前面讲的是写了很多元数据,但是怎么去消费,让机器自动化挑包来做环境部署?根据质量关卡去写部署的脚本,去帮机器过滤,让机器知道这个包应该是什么环境,而不是去向测试团队确认。

533117dc29dc0bedd4deba454e696047b5f2c809

光有应用还不够,还要有环境的配置,应用相关的配置文件怎么去做到不同环境不同配置?不同测试环境的应用配置应该存在不同的代码分支里,然后在部署应用时,把这些配置文件从不同的分支拉下来,这里是通过配置中心实现统一管理。还有数据库版本化的脚本,这些脚本也是存在的,数据库的每一次变更应该变成一个版本化的变更,运维拿到这个包的时候,同样从一个分支拿到相对应的变更列表,保证每一次发布拿到的是全量的东西,包含所有变更历史,而且可以进行自动化特定版本的发布。

ab92be00a18b95b626743f3e35f22e8384b4c943

现在比较火的就是容器,但容器里有很多漏洞,大家会去关心容器镜像漏洞扫描,这个也是银行案例,会去做包的第三方依赖的漏洞扫描。如果没有漏洞才会推到生产环境,同样的到生产环境,他们的安全级别比较多,所以还要做第三方软件漏洞扫描,保证线上环境的安全。

5e39aa81b055a33d27312ac19bffb4ce8cfd648b

有了配置、运维、数据库的统一化管理,可以考虑再往前面推,提供公司基本的CICD工具。这个时候一般是一个团队一个团队地落地DevOps,绝对不是强制性地去做这个事情。部分团队落地之后,不需要研发任何的改造,上来就可以看到扫描的结果,就会看到效果了。可以把这个报告发给各个业务团队的领导,他们就会知道每个团队的成熟度,会去要求研发提高代码质量。由此,运维团队的责任会越来越大,因为他们负责整个公司的流水线,而研发则越来越轻松,他们要关心的就只是业务了。

cace33dec55040761d77701777dcfc27d58edc1b

再往前走一步,当管理了所有工具之后,你的需求比较明确了,就可以自己研发一个DevOps平台。这适合研发能力比较强的企业,当然你也可以运用第三方来做,可以实现整个公司的耗时展示,可以调接口来做这个事情。然后你的研发效率是不是碰到瓶颈了,有了这个工具之后,可以进行封装。这是包含成本的,我们建议先打通工具链,确认你的研发比较平稳了再做这个设计,并不是一开始就来平台改造大量的业务交付流程,需要有一个过渡的过程。

有了这个平台之后,可以做很多想做的事情。底层的这些开源工具给你接口返回数据,你的代码平均测试通过率,可以做一个团队交付能力的画像,看看团队的交付能力是什么样的,发现了问题如何做改进。这里面可以看到,你可以定义一些曲线,曲线就是同行业的平均指标,通过这个可以看到你的企业是否达到业界平均水平。


原文发布时间为:2018-05-30
本文作者:王青
本文来自云栖社区合作伙伴“ DBAplus社群”,了解相关信息可以关注“ DBAplus社群”。
相关文章
|
2月前
|
Devops Java 持续交付
揭秘高效DevOps:用Micronaut打造自动化工具链的秘诀!
【9月更文挑战第9天】本文介绍如何基于Micronaut框架构建完整的DevOps自动化工具链,涵盖从代码编写到部署的全流程自动化。首先通过`mn create-app`命令创建Micronaut项目,并使用Jenkins进行持续集成,定义构建、测试和部署的流水线。借助Git实现版本控制,并通过Docker和Kubernetes完成持续部署,最终实现高效的自动化流程,提升软件交付速度和质量。
45 8
|
3月前
|
运维 Devops Java
DevOps 工具链:从代码到生产
【8月更文第30天】在现代软件开发中,DevOps(Development 和 Operations 的结合)已成为确保快速而可靠的软件交付的关键方法。DevOps 通过自动化流程将软件开发与 IT 运维相结合,从而实现持续集成 (CI) 和持续部署 (CD)。本文将介绍一个典型的 DevOps 工具链,并提供实际的代码示例来帮助您理解如何将这些工具集成在一起。
130 5
|
Cloud Native Devops
《考拉云原生DevOps大规模落地实践》电子版地址
《考拉云原生DevOps大规模落地实践 》
147 0
《考拉云原生DevOps大规模落地实践》电子版地址
|
运维 JavaScript Devops
DevStream v0.1.0 发布,打造灵活的 DevOps 工具链
DevStream v0.1.0 发布,打造灵活的 DevOps 工具链
151 0
|
云安全 弹性计算 运维
DevOps落地思考
为什么团队开发运维方式备受诟病?说到底还是一个效率问题,因为研发和运维之间的利益是不一致的,所以导致效率就很低下。其实DevOps目的最重要的理顺研发和运维之间的关系,能满足彼此之间的关系,调动大家积极性,从而提升效率。
227 0
DevOps落地思考
|
运维 Kubernetes Cloud Native
阿里云云效发布云原生应用交付平台,加速企业云原生DevOps规模化落地
编者按:阿里云云效发布云原生应用交付平台,加速企业云原生DevOps规模化落地10月21日,2021云栖大会云效BizDevOps分论坛上,阿里云云效技术负责人陈鑫正式发布云效云原生应用交付平台AppStack,旨在进一步加速企业云原生DevOps规模化落地。 为什么企业需要云原生应用交付平台?云效云原生应用交付平台有何特色?本文将为你详细道来。
1181 0
阿里云云效发布云原生应用交付平台,加速企业云原生DevOps规模化落地
|
运维 Cloud Native 安全
“双敏”能力及云原生DevOps工具链云效携手亮相阿里云峰会
5月28日举办的阿里云峰会主论坛上,云效以「助力企业构建「双敏」能力,实现十倍效能提升」的定位闪亮登场,阿里巴巴高级研究员兼阿里云智能基础产品事业部负责人蒋江伟亲自发布。
1035 0
“双敏”能力及云原生DevOps工具链云效携手亮相阿里云峰会
|
安全 Cloud Native Devops
GitHub Action + ACK:云原生 DevOps 落地利器
据信通院《中国 DevOps 现状调查报告(2020年)》显示,63% 的企业已经实践落地 DevOps,采用持续交付流水线打通开发、测试、部署和运维多个环节。但是依然有 20% 的企业反馈实践 DevOps 复杂,自建 Jenkins 需要自部署及插件运维,而 SaaS 化 CI/CD 工具又配置繁琐,希望有更轻量便捷的工具加速其转型落地。
GitHub Action + ACK:云原生 DevOps 落地利器
|
运维 监控 Cloud Native
如何落地云原生DevOps?
什么是云原生DevOps?在阿里内部有怎样的实践?企业又该如何落地?阿里云云效专家团队提出了下一代精益产品开发方法体系——ALPD,提供了系统的云原生DevOps落地的方法支撑,帮助企业渐进式地迈入云原生DevOps。本文结合实际案例,分享通过阿里云云效落地云原生DevOps的五个阶段。
如何落地云原生DevOps?
|
敏捷开发 运维 Kubernetes
云原生实战峰会,云效发布云原生DevOps落地5部曲
云原生技术是效能提升的巨大契机,它让团队可以极大的聚焦并加速业务交付。为此组织需要:1)建立不可变的基础设施;2)建设持续交付和DevOps的工具链和工程能力;3)构建和持续完善可信的质量守护体系。
822 0
云原生实战峰会,云效发布云原生DevOps落地5部曲