首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >DevOps 工具链的十年演进 | 直播回顾

DevOps 工具链的十年演进 | 直播回顾

作者头像
腾讯产业互联网学堂1
发布2023-05-29 14:23:59
发布2023-05-29 14:23:59
4530
举报
文章被收录于专栏:云计算行业云计算行业

关注腾讯云大学,了解行业最新技术动态    

本期回顾我们邀请了CODING 资深技术专家 — 周纪海讲师

英国伦敦帝国理工学院博士毕业。毕业后在多家大型银行(巴克莱银行,汇丰银行等)从事 DevOps 工作。

2018 年从伦敦汇丰银行总部派到广州中国汇丰软件,负责投行部千人的 DevOps 转型。2020 年作为首席技术布道师和资深技术专家加入 CODING。

(课程精彩片段,戳阅读原文观看完整回放)

直播回顾

什么是DevOps?

DevOps是通过加强团队的协作,使用自动化,包括架构的微服务拆分,通过这方面的改进,从而提高研发效能,最终可以实现更快速的交付和更高质量的交付。DevOps包含了很对重要因素,可能每个人理解不一样,我个人的理解就是它可能包含了下面这几个重要元素,

  • 流程的自动化,
  • 架构的微服务,
  • 度量跟反馈
  • DevOps的文化意识和分享。

DevOps工具链

刚才提到了一个DevOps的核心元素,这种流程的自动化,流程的自动化其实是实现DevOps一个基础。这种流程自动化一般来说是通过这种工具或者工具链的形式来实现的。

大家看这个图,其实这个就是从写代码到我们最终发布上线这么一个流程。

这个图很好地解释了我们常说的敏捷开发,持续集成,持续交付,持续部署,以及DevOps在整个研发周期里面所影响的范围。所以大家可以看出DevOps其实影响了整个我们研发生命周期。所以我们一般来说一个完整的端到端的软件开发生命周期可能包含了以下几个阶段。

首先是项目管理或者需求管理,另外是源代码管理或者代码托管,接下来是持续集成,以及对代码质量的分析,或者单位测试,或者编译构建等等都是集成在持续集成流水线上,构建打好包形成制品以后,我们会把制品放到相关的制品库进行管理,然后都会进行相关的一些测试,比如功能测试、性能测试等等。

测试通过了以后,我们会进行线上的发布。比如自动化发布,发布上线以后,我们会有接下来运维的一些工作,比如说监控预警,日志分析等等。这里我们简单列举了一下DevOps或者软件开发生命周期涵盖的哪些阶段,其实这也是我们工具链所包含了哪些阶段。

老一代DevOps工具

一般我们说老一代的DevOps工具,一般可以追溯到10年到20年之前。也就是说在DevOps这个名字2009年被提出来前,很多工具他早就已经存在了,比如说一些代码托管的工具,持续集成工具等。 

这些10年到20年前这个工具,其实也是由当时的环境或那个时代所决定的。一般来说老一代比如10年到20年前,那时候的软件开发系统它有个特点,比如说从系统层面来看的话,那时候架构设计很多都是单一结构,就是单一的架构设计。很多时候属于那种大而全的架构,一套架构上面有很多功能都可以提供。

然后从管理项目上来看的话,尤其是很多传统企业,可能到今天为止,还都是延续这种所谓的瀑布模式,也就是说按照这种流程一步一步来,不像我们的敏捷,做成一种小的不停的这种迭代方式。瀑布的话更多是按照这种计划进行做项目。

然后从组织机构上来看的话,那个时候的组织结构分成了很多独立的团队,比如独立的开发团队,独立的测试团队,独立的运维团队。甚至到今天的话,任然有很多公司尤其是传统行业,也都是这种组织结构形式的。

包括开发团队的话,很多还是以一个系统为单位。都是那种大而全的系统,所以说很多开发团队是以系统为单位的话,少了几十号人,多了可能有上百人。这也是当时的一个主要的一个组织结构的现象。所以就像我刚才说的,那个时代的这种现象造就了那个时代的工具,有同类的这种特性。比如说我们介绍几个典型的至少有10年以上历史的这种工具,

比如说一个典型的源代码管理工具,IBM的ClearCase,包括后续的 perface。在八九十年代的时候,IBM的产品和工具还是非常流行的。

然后包括这种项目管理工具,IBM的RTC对。甚至到今天你在一些传统的银行,我们也会看到一些这种工具还仍然存在。

还有比如说持续集成工具,有一个叫CruiseControl.差不多十几年前我刚开始工作的时候,第一个项目就是把持续集成从CruiseControl上迁移到Jenkins上。另外一个就是我们编译的工具的话,对于现在主流编程语言Java和.NET的话,过去主流的这种编译工具,对于Java就是ANTS,.NET的就是NANTS。目前有些传统行业他们依然还在用 Ants。

老一代工具的特点

比如说像我刚刚提到的源代码管理工具,ClearCase和 Perforce,甚至还有现在很多人用的SVN,他们的一个特点都是这种集中式管理源代码。也就是说你接入的是远端的一个服务器,一个代码托管服务器,所有代码都是在远端的中央服务器里面去。像这种集中式管理的话,工具本身比较庞大,而且复杂,学习成本也比较高,用起来也不是特别方便。老工具还有一个特点是,虽然用的是工具,但是并没有形成流水线的模式,无法实现自动化。

代码质量。以前的话也不是有很多关于这种代码这样的工具。并且以前可能也没有所谓这种制品库的概念,大家很多时候就把制品放到了比如说共享硬盘上,或者什么地方进行保存,没有一个统一的管理。基础设施这块的话,以前对我们用的服务器和数据库的配置更多还是通过手动来进行的。测试这块的话以前的自动化工具也特别少,大部分都依赖手动测试,所以老一代我们所谓的10年到20年前这些工具具备一些特性,也甚至有一些问题。

主流和革命性的DevOps工具

背景:

那么从2009年DevOps被提出来以后,我们的研发模式也是发生了一个巨大的改变。比如说开始出现大量的自动化工具,取代了手动操作,还有以前那种大而全这种系统架构,开始逐渐变成能独立测试跟发布的微服务器架构。然后像我刚刚提到的传统这种瀑布模式的管理模式,逐渐向这种基于迭代的敏捷开发模式进行转变。

从组织结构上来说,像这种中央式的测试、运营团队,也逐渐被分到了各个开发团队里面去。开发团队从传统的大型开发团队逐渐划分成以服务为单位的小团队。一般来说,一个这种所谓的部落团队可能不超过10个人,由于这种新的开发模式改变,也影响了新一代的工具的演进。比如大量自动化工具,以及分布式的代码托管方式等先进工具的出现。

刚才提到DevOps也好,整个软件开发生命周期也好,它包含了很多阶段。那对于每个阶段,市面上流行的常用的工具有哪些呢?

比如说项目管理工具,当然我这里可能只写了几种我觉得目前比较流行的一是Jira,二是国内有一个叫禅道的工具。然后是源代码管理工具或者托代码托管工具,现在比较流行的是国外的Github, Gitlab,Bitbucket,以及我刚才说这种中央式代码托管工具SVN,目前也还有很多用户在使用。

单元测试工具的话,如果是Java的话,更多是用Junit,.NET的话更多是用 Nunit.代码质量分析工具的话,其实现在比较主流的是Sonarqube,。也有一些工具,比如像findbug,checkstyle,这个是给Java在研发编码规范来用的。支持.NET代码质量扫描的是FXCop,C++的是cppcheck,Python是pylint等。为什么我们说Sonarqube比较强大呢?因为它可以把我刚刚提到的后面这几个工具全部都可以集成起来,丰富Sonarqube的规则级。

编译工具的话,如果是Java的话,我们现在主流还是Maven,.NET的话,主流是MSBuild。持续集成工具这个不用说了,做过开发的同学我觉得大家都很熟悉了,Jenkins肯定是现在主流。但是另外一个CI工具TeamCity,尤其对于Windows开发的同学,这个工具可能会更有用一些,因为他集成了很多支持.NET开发的功能。然后制品管理工具的话,目前市面上主要是两种,一个是杰蛙的artifactory,另外一个是nexus。杰蛙的Artifactory在中国的话还是比较流行的,尤其是它的一个优点是它的商用版能支持多种语言,比如说C++。

然后自动化配置跟发布工具的话,开源的话主要有几种,ansible, puppet和chef。chef跟puppy是把agent装到你的服务器里面。通过agent来进行相关的配置和发布动作。Ansible的话跟他们不一样,他不通过agent而是通过SSh来进入到服务器里面去进行相关的配置和发布的动作。

自动化测试工具的话其实有很多了,我这里边只是列举了几个,比如像UI自动化测试工具Selenium, 还有HP的QTP以及性能测试工具Jmeter都是比较流行的。

日志分析工具的话现在比较流行主要两两类,一个是开源的ELK。Splunk是商业版的,统计做得非常好,但是费用比较贵,因为它是按流量来收费的。所以说如果大家预算是比较紧张的话,建议还是用ELK。

监控工具有很多种,比如像分布式的skywalking,还有商用版的Geneos。Appdynamic等。还有专门用来展示的Grafana.这里我只是列举了一些我个人理解的比较主流的一些工具,当然也不仅限于此,只是给大家做一个参考。

DevOps就是在我刚刚说整个生命周期的每个阶段,都有一些主流的工具,把这些工具通过集成进行打通,形成一条所谓的工具链,然后通过流水线的形式,实现了我们所谓的流程自动化。

然后这里讲几个我个人认为比较革命性的所谓的工具的变革。其实可能每个人想法都不一样,这只是谈谈我个人的观点。一个我认为比较重要的就是这种分布式的代码管理,就像我刚才提到了,以前我们源代码管理工具更多是这种集中式的管理,它的好处是可能从保密性上更好一些,因为它的所有代码全部保存在这种中央式服务器里,但是这种方式用起来其实并不是特别方便。

后来出现了Git以及基于Git的很多种产品。这种所谓的分布式的代码管理工具,第一个主要优势是开源的。包括他用起来也是非常轻便的。在本地会有一个copy,所以就算你的网断了,你也可以在本地进行代码开发。另外它还有一个特点,你拉出来的任何分支,当你合并进主分支后,这些分支会被自动销毁,这样的话从储存上来说,会节省很多资源,并且分支上不会很乱便于梳理。关于Git的产品,国外主要是Github, Gitlab和Bitbucket.国内主要有两款产品,一个是码云,一个是我们腾讯云的CODING,都是做代码托管起家的。

另外一个我个人认为一个比较革命性的工具或理念,就是我们所谓的infrastructure as code,中文就翻译成为是基础设施即代码,他什么意思呢?就像我刚才提到了以前的时候,对这种基础设施,我们更多是这种通过手动的方式进行这种配置,效率非常低。然后现在通过这种新的写代码的方式对服务器数据库这样的基础设施进行批量地自动化地安装和配置,从而极大的提高了效率。常见的工具,包括刚才提到的Ansible, chef和puppet,都是现在比较主流的这类工具。

另外一个是Pipeline as Code,它是什么意思呢?大家如果用过Jenkins的话,应该会了解到在我们以前的Jenkins 1版本的时候,你可以通过插件把流水线可视化出来,就往上面第一幅图。从2016年Jenkins 2新一代的版本,把流水线集成到Jenkins,不需要插件了,并且通过写代码的方式对流水线进行配置。

比如可以把相关的功能模块,通过编程的方式写到Jenkinsfile里面去,最终形成一条可视化这种流水线。对。所以说这种以写代码的方式,包括前面我们讲到Infrastructure as Code,也是通过写代码的方式,对基础设施的配置进行管理. Pipeline as Code是通过写代码的方式,创建并管理我们的流水线。这种代码取代传统配置的方式其实更更容易被程序员所接受。

一般说DevOps更多是一个左移的过程。我们测试的左移,运维的左移等等。所以很多工作最终可能会转移到程序员这个角色上去。而这种写代码的方式的话,可能会更容易被程序员所接受。所以这也就符合DevOps的一个左移的理念。

我们刚刚稍微介绍了一下我们目前主流的DevOps的工具以及在每个阶段我们都有哪些主流工具,包括一些我个人理解的比较有革命性的一些工具的介绍。那么下一代工具或者新一代工具又是什么样子呢?我们目前主流的工具是在DevOps或者敏捷开发的背景出现的,那么新一代的工具它的背景又是什么呢?我个人理解就是现在的云原生。云原生也是在最近几年被提出来的,然后它也包含了DevOps,微服务和容器。

我们经常说微服务也好,DevOps也好,容器也好,很多时候是密不可分的。尤其是在云的环境下。比如说你拆好的微服务,需要用到能提供动态的并且独立隔离的容器里面去,才能体现出微服务的优势。然后通过DevOps的自动化实现自动化发布,才能把速度提高起来。在这种新的背景下,就出现了这种一站式DevOps平台。

什么叫一站式平台呢?

刚才有一页我给大家介绍,在SDLC的每个阶段需要哪些工具。一站式平台就是所谓的端到端,把所有这些阶段的功能都在了一个平台上实现了。换句话说,一个平台或一个工具,它可以包含整个生命周期里边的所有的功能。像我们之前所说的DevOps工具链,是通过把每个阶段的工具集成进行打通并串起来,最终通过流水线实现自动化。

一站式平台的优势一是对人力成本的节省。因为对于DevOps工具链你可能需要人对不同的工具进行了解。一般来说,很少有人对所有的工具都有了解。而对于一站式平台,所有的功能都在一个工具上,比较容易操作和理解的。所以不需要那么多人去对不同的工具需要进行了解。然后另一个优势就像我刚刚提到它本身就是一个完整的端到端的工具链。从度量的数据收集上来看是很方便。像这种一站式平台的产品,国外有微软的Azure DevOps,还有Gitlab.国内的产品主要有我们腾讯云的CODING和阿里的云效,以及华为的DevCloud.

Okay。前面更多是讲云原生大环境下的一站式的DevOps平台。另外一个就是现在一个比较火的话题DevSecOps,也就是DevOps加信息安全。然后可能有些人可能会问我们为什么DevOps需要加入安全。我们可以用右侧这个图解释一下。比如说右边最上面这个图,是一般传统开发模式,这里举个例子,比如说我们从拿到需求开始,然后开发和测试,最后准备上线,然后整个周期是三周的时间。接下来,上线之前,安全部门或者安全团队肯定要介入进来。审查开发的系统是否有安全安全漏洞。

对于这种安全评审和安全扫描工作,举个例子比如说需要一周的时间,那样的话整个交付周期就是4周的时间。中间这幅图就是我们说过的DevOps模式,通过更好的团队协作,自动化,以及微服务拆分,让整个效率就得到提升。三周的时间,最终被压缩成一周。但是因为传统的DevOpps他并没有考虑安全,随着我们后面安全评审扫描这个阶段还是无法避免的。从中间这个图,大家可以很清楚地看到,在已经成熟实现的DevOps的模式下,目前主要瓶颈是是在哪里了?就是安全。DevSecOps的目的就是进一步压缩后面安全评审这个阶段。换句话说,在保证速度跟质量前提下,如何把安全也考虑进去,同时实现更安全更高质量地快速交付。

毕竟我们今天讨论这个主题是工具,那么关于DevSecOps的工具大体分为这4大类,一个是静态安全扫描工具(SAST),它是对于源代码层面的安全扫描。它就跟我们刚才说到Sonarqube有点像,那个是代码质量的扫描,这个是代码安全的扫描。然后他也是基于一定的规则集去扫你的代码。这种工具它的优点是它地定位比较精准,可以到具体哪一行代码产生的安全漏洞。但它缺点也是很明显的,就是误报率特别高。很多时候需要投入很多人力去验证它的结果到底正不正确,这样的话效率会非常低,也造成了更多的成本。也是因为这个原因,非常限制这一类工具的使用。

另外一个就是动态安全扫描工具(DAST),它的工作原理就像我们写测试用例一样,它的是相关的安全用例,通过模拟黑客的攻击行为,对你的端口跟站点进行攻击,尝试去获取相关的一些敏感信息。DAST的优点也是比较精准,然后误报率比较低。它的缺点是制作安全用例,对开发和测试同学对安全专业知识的要求能力会比较高一些。另外它有时候也会引入一些脏数据,也是一个问题。

第三种是交互式的安全扫描工具(IAST),它的工作原理有点像监控,通过插装(agent),或者代理在系统运行过程中进行截流,然后分析系统是不是有安全漏洞。这三种工具更多是对于我们自己开发的代码和产品的安全保障。那么别人写的代码,别人开发的产品,在你引用它们作为依赖进行开发时怎么保证它们的安全性呢?这就是我们第4种工具— 开源安全扫描工具(FOSS)。这种工具它可以来识别,你引入了这种第三方的工具或者插件,他是不是有相关的安全隐患?

我们前面说的这4类工具,在市面上和包括在腾讯内部,有哪些常用的工具呢?首先静态安全扫描工具,市面上比较主流的有几种产品:一个是Checkmarks,是以色列的产品,还有一款叫Fortify。腾讯内部自研的工具有Xcheck和啄木鸟。关于动态安全扫描工具,市面上的工具比较多,比如说HP Webinspect. 还有一个开源的工具叫OWASP ZAP.然后腾讯内部自研的工具叫做洞犀。它是通过在测试端收集cgI来进行这种安全漏洞分析。交互式安全工具的话,市面上有一种叫contrastsecurity,国内有一家叫悬镜的公司也在做IAST方面的工具。最后开源软件安全扫描工具有几种,一种是Sonatype IQ server,还有杰蛙的X-ray,另一个开源的工具叫做dependencies check,也是在OWASP社区开发出来的。对大家有空有机会可以去了解一下。然后腾讯内部的话,这类自研的工具叫做荷鲁斯和腾讯云 CODING 的制品库安全扫描。至于每种工具在SDLC中所处的位置,比如静态代码扫描工具和开源第三方开源安全扫描工具,更多是集中在开发阶段;而动态安全扫描工具和交互式安全扫描工具,更多是集中在我们的测试阶段。

刚才我们稍微介绍了一下DevSecOps这个比较热的话题相关的工具。最后我们用这个图稍微总结一下,刚才提到了老一代的 DevOps是工具,目前主流的DevOps工具以及基于云原生的新一代的一站式的DevOps平台以及DevSecOps工具。拿两个时间线,一个是DevOps出现的2009年,另外一个是云原生出现的2015年,把这些DevOps工具大体进行一个分类。当然,DevOps工具也不仅仅是今天我分享的这些,今天更多是帮助大家对整个DevOps工具体系回顾。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯产业互联网学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档