火箭仍是飞机?——DevOps 的两种模式

clipboard.png
文章来自 | JFrog杰蛙DevOps微信公众号。npm

做者 | 高欣,JFrog架构师。2019年6月21-23日,GIAC大会DevOps工具链专场讲师,他将为你们分享《Kubernetes上的DevSecOps ——JFrog的Kubernetes之旅》的话题,点击此处便可获取大会PPT。缓存

背景安全

在当下的软件应用开发领域中,愈来愈多的敏捷化企业但愿本身的软件开发过程能以超音速、甚至于星际穿梭的速度,来快速响应各类变化,但同时还要保证安全性。DevOps 流水线无疑为这一目标提供了最佳实践。微信

可是,要彻底知足这样的需求,咱们应该如何去创建合适的 DevOps 流水线呢?有没有一种很好的方式,可以帮助咱们去理解 DevOps 流水线当中 CI/CD 过程,以及容器技术,如 Docker 和 Kubernetes,在其中的角色和影响呢?网络

其实,DevOps 流水线的建设能够类比为两种模式:火箭式或飞机式。从众多客户的应用实践来看,要想运行一个完善的、可靠的 DevOps 流水线,火箭式的建设是远远不够的,实际遇到的困难要大得多。架构

火箭发射模式框架

咱们一般把 DevOps 流水线理解为一个简单的、从左到右的线性过程:编写代码、提交、构建、测试、部署,以及做为产品发布。建立出来的软件在流水线当中就像被装船运送同样,有着清晰定义的去向。运维

clipboard.png

在这种模式下,建立一个应用程序就像发射登录火星的火箭同样。在容许登录任务继续进行以前,必需要计划、审批、测试,以及验证全部的工做。为了准备发射,全部团队必须紧密地协同工做。咱们只有一次机会去发射这个火箭,并且火箭一旦发射,就再没有机会进行修改和更新。从发射台到最终到达火星,火箭的功能是固定的、不可修改的。maven

火箭发射是一次性的。每一次测试都须要建立一个新的火箭,而这会带来一些未知的风险。新的火箭须要在确认全部系统都准备好了以后才能发射,以完成承担的任务。工具

这是一个清晰的、经典的工程模型。可是,这不是 DevOps 应有的工做方式。

航班运行模式

上述火箭模式中比较好的 DevOps 实践是在建立和运行服务时,开发和运维团队在研发生命周期的各个阶段都紧密地合做。

然而,DevOps 并非像高风险火箭发射那样简单的从左到右的线性过程。相反,它是一个频繁触发且不会终止的循环过程,并且每一次触发都会引入一些新的的风险。因此,DevOps更像是现代的航空系统。在任什么时候间,全球的航空公司都频繁地,事实上是连续地,发送着航班,运载着上百万对其充满信任的旅客。

clipboard.png

航空公司管理其飞机和航线的流程,和 DevOps 流水线保证应用发布时效性和可靠性的方法是十分相像的。和软件企业同样,航空公司同样要紧跟技术的发展、快速响应安全问题,以及适应客户需求的变化,同时还要保证整个系统不中断地运行。在平常运营中,航空公司持续对每架飞机进行检查(测试)、维护(打补丁),以及安排运营时间。这个过程和 DevOps 中应用的持续集成、更新和交付过程很是相似的。

和火箭发射的一次性不一样,飞机可以反复地执行起飞和降低,最终执行航线任务的和最初经过测试飞行的都是同一架飞机,这充分代表了两种模式的差别性。那么,怎样才能保证 DevOps 流水线运转得更像是一个航空公司,而不是一名火箭兵呢?

起飞前的清理工做

火箭和飞机都是由许多资源组成的产品,不一样的生产部门分别负责结构、机械和控制系统等各个部分,并且是由不一样的供应商提供大部分的组件,从最基本的如门锁、座椅、地毯等,直到复杂的如导航系统等。

相似的,每个软件应用也是由组织内的多个团队共同建立的,并且应用运行的大部分代码,例如操做系统和语言框架等,都是以企业外部的远程仓库为来源的。

开发人员能够控制将本身开发代码的哪些部分加入构建。可是,对于从公共仓库下载的外部依赖包,如 npm 或 maven 等,又该如何控制呢?那些包可能会不按期的进行修改,而这是你没法控制的。

若是你的 DevOps 流水线像发射火箭同样,那么针对测试或发布的每次新构建,都会成为偷渡者潜入火箭的机会。若是没法作到持续监控,那些计划以外的东西就可能进入新的构建,从而致使每次构建都不能得到彻底相同的结果。

前往跑道

Docker 镜像就像是飞行器,不论是火箭仍是飞机,经过构建而成,并封装了应用要执行的全部功能。从发射到着陆,Docker 镜像的能力保持不变。

Docker 引擎,结合镜像仓库,把镜像转换为容器,就像把这些飞行器推送到发射平台。而像 Kubernetes 这样的编排工具就进一步把这些容器发射到航线上去。

若是像处理火箭同样,每次发射一个新的,那在开发、测试,或发布阶段构建的每一个 Docker 镜像,都有可能和前一个有一些不一样。

clipboard.png

而若是像飞机同样处理,就意味着对发射到空中的内容有更大的肯定性。航空公司不会为每次起飞都制造一架新的飞机。他们只是测试飞机,而后在航线上可靠地运行飞机,直到飞机须要更换为止。

构建一个 Docker 镜像,而后在测试到发布的流水线上进行升级,而不是从新构建,可以确保这个镜像带上航线的都能每次、准时、安全地飞翔。

clipboard.png

地面控制

正如上述分析的,真正的 DevOps 流水线不是简单的从左到右的线性过程,而是设计、分解和重构的复杂、迭代、网络化的过程。

为了使 DevOps 流水线运转得更像是航空公司, Artifactory 能够做为地勤人员,来保证一切都按计划、平稳地运行。Artifactory 使得开发人员可以控制从代码构建而来的 Docker 镜像,并经过老是在航线中运行同一架飞机来保证可靠性和速度。

首先,Artifactory 解决了一个开发人员面对的关键挑战,那就是利用如 npm 或 maven 这样的外部依赖,也能进行持久、肯定的构建。利用 Artifactory,开发人员可以维护外部仓库的本地缓存,从而保证外部代码的变化在没有确承认用以前不会被引入到构建当中。并且,保证外部依赖的本地访问,也能帮助加速构建,提高生产力。

利用 Artifactory 做为 Docker 镜像中心,可使得 DevOps 流水线中从测试到发布的各个阶段之间升级实不可变的构建产出变得更加容易,而不须要每次都从新构建。一样能够根据须要,利用 Artifactory 为每次构建存储的详尽信息,来建立新的肯定性的构建。

飞机飞行须要燃料,而航空公司,就像全部现代化企业同样,基于数据进行运维。航空公司对他们的飞机、客户和工做人员了解得越多,就越能帮助他们最大限度地提升投资回报率。

Artifactory 做为 Kubernetes 的 Docker 镜像中心,能够提供简化、安全实施运维工做所需的数据。除了容器、镜像的列表以外,Artifactory 还能够可视化地展现容器里都有什么,以及这些内容是如何进入容器的。

若是再增长利用 JFrog Xray 对镜像进行扫描,就能够得到更多有关镜像当中代码真实安全性的信息,进一步保护企业和应用。

翱翔天空

不只仅像本文说的,真正的 DevOps 流水线就像是现代化的航空公司,DevOps 已成为大多数航空公司自身运营的关键实践。联合航空公司、西南航空公司、阿拉斯加航空公司和捷蓝航空公司就是众多航空公司的表明,它们已经为 DevOps 和 CI/CD 作了大量的投资,在网络和移动平台上为其客户提供购票、值机、登机等各类服务。这些航空公司不少都引入了 Artifactory,得到了在全球范围发展 DevOps 的巨大收益。

正如这些高风险企业所展现的,仅仅将 Docker 容器推上跑道,对于真正的 DevOps 是不够的,须要利用 Artifactory 为 CI/CD 提供的支持,来确保它们在天空中安全地飞翔。

GIAC大会

高欣将于6月21-23日,做为本届GIAC全球互联网架构大会讲师为咱们分享《Kubernetes上的DevSecOps ——JFrog的Kubernetes之旅》的话题,具体议题可戳图片了解。

clipboard.png

第五届GIAC大会将于6月21-23日在深圳博林圣海伦酒店再度强势来袭。

本届大会,组委会邀请到了105位来自Google、微软、Oracle、eBay、百度、阿里、腾讯、商汤、图森、字节跳动、新浪、美团点评等一线互联网大厂嘉宾出席,围绕AI、大中台、Cloud-Native、IoT、混沌工程、Fintech、数据及商业智能、工程文化及管理、经典架构等专题分享他们的实践经验、遇到的问题及解决方案。如下为本届峰会精选案例:

clipboard.png

相关文章
相关标签/搜索