导读:很多朋友问到关于devops组件怎么用的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!
什么是devops
DevOps是IT服务管理的一种模式。过去的数十年间,IT运维发展经历了数个阶段。从早期的手工运维到标准化运维、自动化运维,到如今的DevOps、AIOps。
简言之,DevOps试图打通开发和运维的部门墙,从而打通整个IT价值交付的全生命周期,从产品需求到上线运维的全过程实现效率的提升。
DevOps最显著的作用是提高了企业产品的交付质量、缩短开发周期、减少故障。而降本增效是每一个公司在数字化转型之后的很大的挑战,DevOps无疑直击痛点。
而作为一名DevOps 工程师,除了要具备软件工程师基本的编程能力以外,还需要特定的人际交往、工具使用等技能。换句话说,DevOps 工程师需要“软”、“硬”技能兼备,具体如下:
一、沟通与协作技巧
DevOps 是一种横跨软件开发、测试和部署的协作方法。它将原本具有不同目标的开发、测试和运维小团队聚集在一起,以实现更高效和高质量的代码发布,这就要求 DevOps 流程中的不同角色之间不能有任何交流障碍。因此,良好的沟通技巧(无论是口头还是书面)对于优秀的 DevOps 工程师来说是必不可少的。
协作能力也很重要。DevOps 是团队合作的开发模式,每个工程师都是团队成员,需要在整个软件迭代过程中支持其他同事的工作。这不仅仅要求我们成为一名优秀的队友,还要在适当的时候给新人一些建议,包括但不限于指导和建议团队成员交付代码的最佳方式、编码时使用哪些工具以及如何测试最新功能。这就要求我们自身也要对这些 DevOps 流程中的必要技能有所了解。
二、熟悉和理解 DevOps 工具链
除了协作和沟通这样的“软”技能之外,DevOps 工程师还必须知道如何使用各种复杂工具协同工作以支持软件交付目标,这是成为一个优秀的 DevOps 工程师所必备的“硬”技能。
DevOps 工程师需要知道如何使用和理解以下类型工具的作用:
版本控制工具
详细地说,集合了代码审查、合并功能的版本控制工具是能让多个开发人员之间完美协作的主要DevOps 工具。由于 DevOps 流程汇集了来自各个部门的专家,所以他们需要了解源代码控制系统,以及系统跟踪不同应用程序中的更改。此外,它还维护应用程序的多个版本。
目前 DevOps 流程中常用的版本控制系统都基于开源分布式版本控制系统 Git,例如 GitHub、Gitee、GitLab 以及各大厂商基于 Git 定制的内源协作工具。
持续集成工具
持续集成(CI)是 DevOps 的关键技能之一,它是构建 pipeline 的重要部分。DevOps 要求运营和开发团队使用统一的系统。因此,持续集成所做的就是将开发人员的代码与 master 合并在一起。有了这样的技巧,就可以有效地合并数据。因此,DevOps 工程师一定要知道如何使用一些常用的 CI 工具,例如 GitHub Action、Jenkins、Bamboo、TeamCity、Travis CI 等。
容器与编排工具
容器作为现代微服务与云原生架构的核心技术,提供了关于 DevOps 的三个基本功能,包括持续的实验、流动和反馈。容器技术的不可变基础设施实现了操作系统层虚拟化,不仅方便运维程序升级和部署,还升华成了向应用代码隐藏环境复杂性的手段,成为推广分布式服务的必要前提。
目前,Docker 仍然是应用最广泛的容器技术,而以容器编排引擎 Kubernetes 为核心的云原生技术栈则是各大互联网企业构建容器技术基础设施的事实标准。
自动化工具
自动化是软件开发过程中必不可少的要素之一。几乎所有的手工任务都可以使用各种脚本语言自动完成。例如,Ruby、Bash、Python、Node、Shell 等等。可以说,使用自动化开发工具已经成为了很多 DevOps 团队加快开发和部署过程的关键。想要成为 DevOps 工程师,掌握自动化工具很有必要。
监控和报警工具
DevOps 持续集成和持续部署的实现离不开持续监控的辅助作用。许多微服务都是由数百个组件组合而成,其中一个服务的故障可能导致整个系统崩溃。当然,手动找到核心故障问题是很复杂和耗时的。其中一个解决方案就是持续监控关键特征,如 RAM 使用、请求数量、异常数量和存储空间。因此,需要根据系统的关键特性设置一个警报系统。例如,当存储空间使用率达到 80% 时应该触发警报,以便 DevOps 运维开发人员可以在整个系统崩溃之前解决问题。
三、具有成熟编码标准的特定编程技能
然编程能力是每个开发者最基本的能力,但 DevOps 工程师在这方面仍然有一些更特殊的要求。
通常来说,DevOps 工程师需要在专精 1-2 门编程语言的基础上熟悉多种语言,例如 Java、JavaScript、Ruby、Python、PHP、Go 等,这是由微服务时代同一系统不同服务可以由不同语言、不同框架实现的特性而决定的。DevOps 工程师至少需要了解这些语言的特性并具备在操作系统环境中编写和调试它们的能力。
四、技术支持和维护技能
优秀的 DevOps 工程师不仅需要开发方面的技能,有时还需要为客户提供维护和技术支持。这意味着 DevOps 工程师应该乐于为内部和外部客户提供支持,并在出现问题时进行故障排除。
DevOps-Jenkins 集成 Active Directory
最近在搭建一个 DevOps 平台,中间涉及搭建各种相关组件,在这里把这些过程做一下记录,前文已经介绍了 如何在 CentOS 7.5 上搭建 Jenkins ,本文主要介绍Jenkins 如何集成 Active Directory。
Jenkins 集成 Active Directory 是通过插件进行设置的,Active Directory 插件和 LDAP 插件都可以配置,本文使用的是 LDAP 插件,首先点击菜单【Manage Jenkins】-【Configure Global Security】:
然后在【Security Realm】中选中 LDAP:
接下来配置 LDAP 的一系列参数,其中 Manager DN 中配置一个域里面的账户信息,包含 CN,OU,DC,具体可以在加域的 Windows Server 上使用 dsquery 命令去查询,详见下图:
配置完成后就可以测试配置是否成功了,通过输入一个域账号的用户名和密码进行测试:
测试成功后会出现以下信息:
然后就可以使用域账号进行登录了。
Devops工具的应用能够带来什么好处?
以近期爆出的多个Spring高危漏洞为例,如Log4j、Dos漏洞,DevOps可以通过漏洞的自行建立,以可信源库和漏洞库建立起对Java代码依赖包的管理,从容应对紧急发布的漏洞。
Spring在Java中的地位超然,像近两天爆出的Spring核心框架Dos漏洞,会影响到几乎所有的Spring系列组件,例如常见的SpringBoot和SpringCloud等,并且spring系列组建被广泛运用与业务系统开发,覆盖面极广。
同时,该漏洞是一种潜在的漏洞,但是利用该漏洞进行该攻击服务的手段的门槛较高,需要利用可控可执行的SPEl(SpringExpressionLanguage,Spring表达式语言)。
只要SPEL可控,那么就会有Dos漏洞。
拿谐云DevOps来说,是面向软件研发团队的一站式研发协作管理平台,提供从需求到设计、开发、构建、测试、发布到部署的全流程协同及研发工具支撑。全面满足企业研发管理与工程效率等需求,一站式提高管理效率和软件研发质量,助力团队快速实践敏捷开发与 DevOps,提升软件交付质量与速度,助推企业数智化转型升级。
可信源管理从项目持续集成、发版门禁源头堵截高危漏洞上线,维护应用依赖版本库,当发现漏洞后可以直接创建工单针对性修复。平台支持定期从中央漏洞库拉取漏洞,在流水线运行过程中对使用到的依赖包做扫描校验,在申请发布前的对发布版本做扫描拦截,扫描范围包括漏洞、基线、可信源匹配,可信源冲突、门禁。在代码合并前经过多人审批,并设置分支保护权限,从而规避相应风险,提高安全等级。
大型企业实施 DevOps 的三个阶段
DevOps时代 发表于 DevOps时代的专栏
估计阅读时间12分钟
《DevOps 实施手册》介绍
现在开始我的分享,大家有这样一个感觉,现在技术发展的太快了,技术还没有普及就被淘汰了。在这样一个浮躁的时代我为什么翻译《DevOps 实施手册》这本书呢?因为在《DevOps实施手册》里研究的都是长久以来一直有效的理论,比如像福特汽车的生产流水线,像丰田的精益生产,还有敏捷开发思想。这些思想并不是近期出现的。
2009年,在这些思想的基础之上 DevOps 应运而生,让开发与运维甚至是运营之间的协作更加高效,希望这本书能够帮助到正在做 DevOps 转型的企业,解决数字化转型过程中遇到的实际问题。本书独家介绍了自上而下的 DevOps 实践(企业级),如何让领导者和参与到 DevOps 变革中,后面会进行详细的介绍。
另外一类是自下而上的 DevOps 的实践(团队级),还包含了如何让组织自发产生新实践的组织模型。
消费改变需求实现方式
我们开始今天的主题,首先,按照以往的经验,实施 DevOps 一定会提高生产效率,降低产品成本。如果成本足够低,就应该占领大部分市场,这个假设是正确的吗?下面有一个例子:
福特汽车在1914年引进了流水线技术,将一台汽车的成本做到 7000 块钱(一台IPhone),和手机一样的价钱,市面上有90%的汽车都是由福特生产的。如果事情按照这个逻辑发展下去,几年后福特将会统一汽车市场。
六年之后,流水线优化,每十秒钟就能生产一辆汽车,成本降到了2000元(一台小米手机)花一台小米手机的钱就能买一辆汽车。当时创始人老福特的有一个笑话,他说:“我的客户可以选择任意一种颜色的汽车,只要它是黑色的。”
实际情况是客户只能选择黑色的T型车。为了每10秒生产一辆汽车,只有黑色的油漆干燥的速度才能达到要求,所以生产的汽车都是黑色的。在随后的六年时间里,效率提升和成本降低做到了极值,但结果是订单远远低于了产量,生产出来的汽车只能积压在仓库里。
当汽车变成代步工具,同质化的T行车无法满足用户定制化的需求,因此通用汽车用不同颜色和配置的汽车和更高的售价,占领了个性化汽车市场,从而打败了福特汽车。这个案例证明只提高效率降低成本并不能统一市场,只有满足用户需求的产品才能生存。
当我们选择汽车的时候,如果我已经拥有了廉价T型车,下一个辆要买什么样的车呢?不再是 2000 元的同质化的代步工具,而是根据自己的喜好选择不同颜色和配置的汽车,哪怕是价格稍微高一些。通用汽车适时的推出了个性化汽车占领了汽车市场。
大部分的汽车点评网站都会把汽车按照价格分为以下几种,有5万元的汽车,有10万元的汽车,还有30万以上的汽车,这些不同的汽车为什么定这个价格,人们购买的是什么?
比如说5万的的汽车,做到了基本代步工具应有的功能(有座椅,可以遮风挡雨,重点是可以开),如果满足更高的需求,比如更强的动力,更大的空间,一边开车一边听听音乐,这一类是期望的需求,这样需求得到满足用户的满意度会直线上升。
还有另外一种就是兴奋型需求,比如我想买有自动泊车功能的,还有如果我手里拿着刚买的一堆东西,想放到后备箱里,只要脚在后备箱下面一滑,后备厢门就自动打开了,这就满足是特殊场景的需求。
再或者有自动驾驶的功能,车辆会把孩子按照导航制定位置送到幼儿园(在美国法律下的特斯拉可以做到)。简单的来说兴奋型需求就是黑科技。
用户的需求分为基本需求,期望需求和兴奋需求,因为不同的需求而购买产品的客户表现出很大的差异,而为了满足不同需求,对企业能力的也是不一样的,接下来看一下为了满足不同需求,要做哪些方面的设计和考虑。
为了满足期望型需求(定制化需求),厂商需要进行客户调研,使用组件方式批量生产,高效地满足定制化需求,达到快速高效的推出新产品的目的。 对于定制化软件产品使用将产品拆分为组件,通过对部分组件定制化开发高效满足定制化软件的需求。
为了满足基本需求(固定需求),厂商需要严格控制风险,减少新产品失败的可能性,通过流程固化部门协作,提高部门内部的效率,来降低成本。对于满足基本类型需求的软件产品,需求主要是短期内不会变化的协议和标准。提升竞争力的方法类似于T型车,不断优化流水线提高效率降低成本。
为了满足兴奋性需求(黑科技),厂商需要了解用户使用产品的场景和情绪,比如说像用脚在后备箱下面滑一下就能打开后备厢门,对于黑科技的软件产品,需要了解用户使用产品时的行为和情绪变化。
就像现在的电商网站,在用户浏览和购买产品时,记录用户行为(经常浏览商品种类,购物车内产品等等),从而判断用户喜好。在了解用户购买偏好后,提高推荐商品的购买成功率。
对于基本需求,就像买水买电和石油都一样,产品没有本质差别,只要便宜就好了,不断提高效率,降低成本,就像T型车不断优化流水线一样。
对于满足期望需求的软件企业,我亲身经历过这样一个案例,在十多前,我在一个通讯公司里,研发部门的产品是支持内部业务的IT系统,同时也对运营商销售企业内部使用的IT系统。这样的研发的模式中有一个业务分析(BA)的角色,定期去拜访客户了解客户业务和对软件的需求,然后对部分组件进行定制化开发。
这样的组织有两种研发模式:通用组件的研发和定制组件的研发。研发团队工作模式和对工程师的能力要求是完全不一样的。通用组件的团队注重软件执行效率和通用性,而定制化团队专注于实现业务需求。
从总体上说提高组件复用率,减少定制开发工作量降低总体成本是优化的方向。
谈到兴奋型需求,需要感知用户的行为和情绪,传统企业不直接面对个人消费者很难感知到客户情绪,但是对于有大量用户行为数据和互联网公司却可以做到。在用户使人某个功能不顺畅,导致用户不再使用,这种用户行为就表现出客户情绪的不满。了解用户用使用产品或服务的场景,感知使用过程用户情绪的变化,才有可能作出让客户惊喜的功能,甚至是黑科技。
最近我和一位BAT工作的前同事聊到短视频应用产品,他把内部产品和抖音做对比,过程是观看30条短视频,对某一类型的视频反复观看。结果是抖音可以识别出用户对这类视频的偏好,反复推荐类似的内容,而内部的产品却没有任何改变。通过算法和大量用户使用数据对产品或服务进行优化,明显提升了产品的竞争力。
满足三类不同的需求,需要具有不同的企业能力。从满足定制化需求的企业(通过用户调研,生产出相对便宜的定制化产品),跨越到与用户的协作,实时感知用户情绪的企业,推出令用户兴奋的黑科技。这个变化是数字化转型中企业所面临的挑战。需要打通从需求、研发到业务运营整个的协作过程,建立新角色,落地新能力。下面是我的一点总结:分工会提升个体效能(产出output),系统性全局优化才能提高业务价值(价值outcome),对最终价值交付的优化才是关键。
企业核心竞争力来自于协作效率
我们现在看一下用户对企业竞争力的影响,这个是一个如何提升企业竞争力的例子,IBM(国际商业机器)成功的关键是生产满足商业公司所需要的计算机设备(IOE的I就是指IBM的小型机),早期的计算机是用来为政府和科研机构服务的。IBM与UNIVAC不同之处在于IBM服务于企业的财务人员和银行业。
IBM在企业计算机领域使用相同的技术战胜了科研领域的UNIVAC,而当时UNIVAC的服务对象是政府机构和科学家,不削于给企业的财务人员做计算机,但是我们现在知道,企业的计算机市场规模是非常大。
IBM在这个市场里面获得了成功,我们所说的企业竞争力体现在服务的对象足够多,服务的市场是否足够大,这是第一位的前提。
第二点是企业的核心竞争力在于它有能力构建新的价值网络,价值网络源自于传统的供应链。企业给供应商下单的规格和数量变化不频繁。
价值网络的不同之处在于,在美国的苹果公司对中国深圳的企业提出变更需求,两个小时以后流水线改变已经完成,24小时之后就可以生产出来新的手机了,中国的柔性制造能力世界第一。价值网络的难点在于,协同价值网络中分工足够细的,大规模生产企业,快速重新组合的能力。
下面的这幅图是2007年的时候诺基亚推出的经典手机,也许在座的听众也用过其中的某个型号的手机。
放这张图的意思是说明诺基亚当年通过推出大量定制化外观的手机,很好的满足了我们对手机外观多样化的需求。但是被只有一种外观,而且每年只出一款手机的公司打败了,这是为什么呢?他就是IPhone手机。苹果把更加广大的开发者加入到了协作网络里面去,让手机从只能打电话的通信工具,变成个人的效率提升的工具,可能我们现在真的一分钟离不开手机,但在十年前是不可想象的。
下面的图是基于云计算的平台三家公司,每个公司都有自己的布局,从电子商务、社交领域和搜索入口建立生态。这些平台上的应用的图标可能大家很熟悉,在不同的维度收集用户行为的数据,感知用户使用产品时的情绪变化,从而把服务越做越好。数据在组织内部可访问,在一个云生态内部,共享用户行为数据的成本非常低。
第二个就是自动化的基础设施,在云平台上快速调度计算资源应对用户流量是很容易的事情。最后在集中化和分布式平台,本身有利也有弊,集中化会建立统一标准提高协作效率,在较大的生态中一定会有协议和标准,而在小团队里面对于自己的业务作出有针对性的工具提升用户满意度,有不同才有比较,有比较才有不断的创新,这也是集中和分布式的一些思考。
企业竞争力在于与外部价值网络高效协作,我们都认为企业做的好是企业内部管理做得好,企业的效率高,所以企业才有竞争力,其实不是这样的,企业的竞争力是来自于企业对外部协作网络提供的价值。
企业的竞争力来自于服务的客户和市场的规模,企业的竞争力来自于创建更大的协作网络,企业竞争力来自于促进生态合作,增加服务市场规模。这才是企业竞争力的三个表现。
最后有一点值得讨论,在云计算平台上构建生态,满足了不同规模的需求,甚至是某个用户某一次特殊的需求都能得到满足。在传统企业模式下是无法想象的,因为市场规模不够大,不能形成规模效应降低成本,所以只能对具有一定规模的需求推出产品和服务。
云平台也将引入需求众包模式,比如重筹的平台,会满足大量的小规模的需求,这个云计算具降低了信息发布的成本,对服务市场带来了新的增量。
大型企业实施 DevOps 三个阶段
下面进入正题了,首先 DevOps 是一次系统性的变革,下面是提升研发效率的3D原则。我们类比集装箱运输的体系,在集装箱运输发展的早期阶段中,用户的按照传统的方式使用集装箱,集装箱内的货物不一样,从汽车运到轮船转运过程中不断的开箱拆包,大大降低了转运效率。
在二战时期,美国军方需要把大量的物资运往前线,从而总结出了在装箱,分拣和送货过程中的高效原则,基于这些原则我提出了研发体系的3D原则,一键式部署,一次构建打包,一次配置分发,在构建、测试和发布环节减少再次打包和人工过程。在遵循这三个原则之后,发布软件的时间可以控制在10-30分钟以内。
其次,DevOps 不是一次性的工程,可以一劳永逸,下面是一个软件研发过程当中的价值流图。
下面是我非常喜欢的一句话:“比日常工作更重要的,是对日常工作的持续改进。”
其实我们每个人都在做很多工作,可能每一天都会比前一天做更多,李智桦老师给出了企业效能的公式,企业效能等于实际产生价值的工时除以是总工时。在这张图里算出来的企业效能仅为16%,原因就是很多的工作都有等待,有的工作有返工。粗略的算一下从目前的效能水平,优化到总体效能提升两倍、三倍是绝对有可能的。而在某些环节内部按照 DevOps 实践完全有可能做到5倍,十倍或者二十倍效能提升。
随着业务在不断变化,技术在不断进步,在工作流中的每一个环节的情况就像左边一样混乱。DevOps 变革是一次大爆炸式的变革,就向扔一把扑克牌,落地之后就是整整齐齐在那里,而且牌面都是朝上的。这就是实施 DevOps 变革的兴奋性需求,如果谁的 DevOps 能实施到这个程度那真是赞了。
这个过程是如何做到的?首先我们要考虑两种力量,第一种力量是敏捷,敏捷的目的是什么呢?就是把我们每次交付的时间缩,做对用户有价值的事情。第二种力量是精益,我减少价值流图中的浪费。只要持续的改进,最后的结果一定是把我们软件研发的过程,到最后的生产,甚至是运维的环节做到统一和高效。
我们说在 DevOps 发展的初级阶段立足于促进研发和运维的协作。但是在我们来看只有 DevOps 帮助业务达成业务目标,才是可以持续的模式。也就是说做了流水线,也做了很多改进工作(产出 output),但是业务并没有因此而获益(价值outcome)。
自上而下的实践要求的是统一性和确定性, DevOps转型需要投入非常大的成本,使用业务线思维的DevOps与业务沟通,把 DevOps 实践作为一个有利可图的实施项目。
决策层投资了 DevOps 实践就期望从中获得收益,我们要把DevOps 提升的结果翻译成业务人员能懂的语言,比如说我们可以缩短产品上市时间获得先机,可以让我们的生产更加稳定,减少以外带来的损失。
下面说如何产生新实践,工程师都喜欢去研究一些新技术,有很多团队在做这种尝试和创新的话,其中有各种比较,逐步找到创新的方向,所以说自上而下的 DevOps 实践带来业务价值,自下而上的 DevOps 实践获得新实践。使用企业级的实践提升业务价值,使用团队级别实践不断产生新实践。这样形成正向循环。
在我们推广 DevOps 的时候,大家感觉都是求着研发人员改进一样,为什么要求人呢?因为人家的工作内容里本来就没有实施 DevOps。还是上文说过的一句话:“比工作更重要的是工作的改进。” 如果改进不是每个人的工作内容,不作为考核的内容,实施DevOps实践就只是一时的事情,无法落地。
右边的图是稳定的学习型组织模型,比如说在一个公司的两个部门里,成立一个协会,会定期分享案例,或者是组织实践评选,在一个部门内部会有相同角色的人组成分会不定期分享工作中经验,让小团队中的实践在全公司范围内都是可见的,减少重复造实践的成本,同时也会把做相同的事情的人的经验整合起来。
最后还是说对领导的培训,做个广告,有的读者真的把《DevOps实施手册》的截图发到朋友圈里给老板看,用这种方式和领导沟通。因为有些话不能直接给领导说,所以就用我的书里的实践来影响领导。
最后总结一下,首先要有一个清晰的路线图,明确投资回报率,然后在试点团队验证新实践的交付有效性,最后,建立改进的考核目标和组织模型,鼓励分享经验的团队,吸引对变革有观望和怀疑心态的人加入到变更中来。
DevOps 五个能力能级
下面是我的一个思考,公司根据核心竞争力划分为三个等级,产品、平台、生态。
对于公司面临的商业环境来说分为五类,最复杂的一款是无序,最复杂的情况下即使可以复制之前的实践,也无法得到相同的结果。
同样的,对工程师取得的成就也为五类,很巧也是五类,最高等级是开创一个产业(爱迪生、福特、贝尔),比如说像开创一个产业的人,二级工程师是作出先前没有的东西,而改变世界(谷歌的云计算发明人迪恩Jeff Dean),三级工程师必须是一个非常好的产品经理,可以作出被市场认可的好产品。
在公司内作出有影响力的工作,就达到了四级工程师的要求。最后,一个人可以独立解决问题,完成工作即为五级工程师。
最后,从我们的环境和我们能取得的成就来看,DevOps服务能达到的极限就是服务所有云上的开发者和生态合作伙伴,将价值和信息传递给最终用户。第二个等级,是组织内部的业务平台,对价值网络其他组织提供价值。
从平台和生态角度看,引入更多外部协作,就是公司竞争力的体现。第三级,在一个组织内部协调各部门的资源,达成系统性优化,显著提升组织效率。第四级,通过可见性建立信任文化,提高团队协作效率。第五级,支持个人完成任务,并具备持续改进能力。
小节一下,当基本需求得到满足的时候消费者会提出最高的需求,如何满足更高层次的需求?就要不断的扩大协作范围,这对组织结构和能力是非常大的挑战,数字化转型就可以理解为一个组织从满足期望需求,向满足兴奋型需求转型的过程。
第二个就是说技术和业务的变化带来的组织模式的变化,打破仓筒结构形成全局优化,就是前面提到的, 4000名开发人员工按照相同的规则做研发。
大型企业通过三个阶段实施DevOps,首先要有路线图,要有商业化的试点案例明确投资回报率,在组织模型和考核方面鼓励创新。
最后是我对DevOps的服务发展的一些思考,通过引入更大规模的协作提升组织竞争力。
原文发布于微信公众号 - DevOps时代(DevOpsTimes)
原文发表时间:2018-12-26
阅读原文
DevOps的设计实践
起初对于DevOps的概念的理解仅仅停留在“使用Bamboo自动化部署服务到指定环境上”,当我们开始尝试着对DevOps的流程开始做推广,首先确定的方案是,推动各组使用Bamboo做CI/CD的集成,第二是针对当前项目面临管理混乱的痛点问题,进行项目发版采用语义化版本管理。但正如康威定律所言,“设计系统的组织其产生的设计等价于组织间的沟通结构。”,我们不能仅仅在一次讨论中确定的方案就企图变革组织间的长达几年的沟通协作习惯。并且DevOps也不简单是一个普适的解决方案,它是一个 平台(Platform)、流程(Process)和人(People)的有机整合。
根据 martinfowler博客 中发表的对DevOps文化的见解(如下图),他认为DevOps文化中最重要的原则是 责任共担和质量导向 。在这点上,我认为我司有天然的优势,在项目开展的初期,包括当前项目运行生命周期中,研发包揽了大部分运维工作。可以说我们不从来不缺敢于担责的“勇士”。但同时,在我司大幅扩招的现状中,加强流程管理,保证这种文化的延续,同时在人员流动中能动态的加强文化导向,这是DevOps指导思想中重要的一环。
工具 = 平台+ 流程,首先,平台最重大的意义是承载企业内部的标准化流程,平台固化的每种流程,都可以用来解决某些实际问题,这样就会形成一下特征:
通过平台赋能,所有人都能以相同的操作,获得相同的结果。这样一来,跨领域之间的交接和专家就被平台所取代,当一件事情不再依赖于个人的时候,等待的浪费就会大大降低,平台就成了组织内部的能力集合体。
任何方法论不结合企业实际的现状来分析都是耍流氓(无处不在的康威定律),那么对于我司的实际现状,建立这一套体系能解决哪些问题呢?在和研发童鞋讨论问题的时候,能看到他们往往是处于只见树木不见森林的状态,整个“森林”往往是被少数的人所掌握的,这点在季度述职时候已经被不少人提出来过。诚然我们作为安全公司,部分产品是敏感且需要保密的,但是从整个层次和架构来讲,我们需要适配一套流程,达到 对技术开放,对数据加密 ,安全的流程正是SecDevOps需要解决的问题。同时这也很切合“三步工作法”中 流动 原则,只有 把复杂的流程简单化,可视化 我们才有机会让更多的人看见森林。而目前结合生态,软件交付的效率和质量成了当今企业的核心价值和核心竞争力,DevOps作为软件工程的第三次革命,总结来看它的价值体现在以下两点:
让一切软件交付过程的手动环节,都是未来可以尝试进行优化的方向。DevOps倡导职责共担,持续改进是需要将规则内建于工具之中,并通过工具来指导实践。如果仅仅是把线下的流程搬到线上执行,是没法发挥DevOps真正的价值。说到底,工具没法解决人的问题,这样一条看似取巧的路径,却没法解决企业的根本问题。这时候,就需要文化闪亮登场了。
总而言之,DevOps 中的文化和工具,本身就是一体两面,我们既不能盲目地奉行工具决定论,上来就大干快干地采购和建设工具,也不能盲目地空谈文化,在内部形成一种脱离实际的风气。我们要做的是 关注价值、关注现状、交互式流程和反馈、协作和可视化、自动化和持续优化、极简原则和关注实践。
敏捷管理不仅仅与研发敏捷,同时也要针对于业务敏捷, 开发更少的功能,聚焦用户价值,持续快速验证,就成了产品需求管理的核心思想。
另外通过“研发一体化流程”图示,我们也能见微知著。在我司目前在产品使用JIRA的看板形式做需求管理,这套流程在敏捷业务管理中已经有很好的天然优势, 我们需要做的是打通产品和开发的交流屏障 ,这部分流程以及功能,在我们的排期中暂时靠后,现未有具体实施方案,目前仅给出 BizDevOps 的核心理念:
关于持续交付功能,是初期内我们重点投入的阶段,这也是作为研发真正的用武之地,首先面临着第一个问题,自研OR开源?在我们开始做DevOps之前,已经有了部分在用的优秀开源工具作为支撑点,Jira、Bamboo、BitBucket。这些工具一定程度上减少了我们初期的工作量,在后续的项目计划中,我们做了基础存储,权限、DevOps流程等多方调研。关于存储和权限这类基础架构目前都有着成熟的开源解决方案。但是DevOps流程关联公司TOG的业务性质,以及目前的项目现状,我们选择自研平台,主要的规划方向有:
1.版本控制、变更管理
主要核心思想是: 版本变更标准化,将一切纳入版本控制,全流程可追溯和单一可信数据源。 ,一套标准化的规则和行为习惯,可以降低协作过程中的沟通成本,一次性把事情做对,这也是标准和规范的重要意义。
2.持续构建和持续集成、部署与发布的模式
主要核心思想是:用自动化的方式完成从项目编译到发布的流程
3.环境的搭建管理、元数据、初始数据的管理
这是目前我们项目发布中的瓶颈,配置、初始化数据应当纳入版本控制,同时制定标准的业务流程;
4.度量与反馈
针对于交付效率、交付能力、交付质量做指标统计,以及建立可视化平台。主要的指标包括, 需求前置时间、开发前置时间、发布频率、发布前置时间、交付吞吐量、线上缺陷密度、线上缺陷分布 等。
5.内建质量、保证测试
内建质量有两个核心原则 :
在为期近4个月的DevOps实践中,我们主要做了三件事情, 部分项目Bamboo的集成、基础架构的建设、DevOps平台的开发 。
初期我们做了一些关于DevOps的调研和实践,在 尽可能采用开源项目 的原则上,依赖于现有的技术结构,摸出了一套关于Bamboo的使用流程
开源OR自研?这永远是一个需要不断权衡和取舍问题,之前我们已经谈论到持续交付要做的事情有哪些,当开源组件不能Cover我们当下的流程,自研平台自然得上线了
基于上图我们可以看到FlowDevOps平台的基本的交互和流向。平台开发到现在经历了四个小版本的迭代,主要包含以下几个特性:
值得一提的是,我们选型了Jinja2作为配置模块统一管理,对各个环境公共组件的地址存放与平台,保证了服务离线部署中各类连接出错的问题。同时这种方式对业务的侵入较小,符合我们短期内提升部署效率的预期。
诚然,DevOps的建设在短期内已经做了不小的工作量,但是还是存在一定程度的问题。包括以下方面:
根据全球云计算峰会成熟度模型预估来看
在我司云原生于我们似乎是非常遥远的,陌生的技术栈,各类反直觉的故障。但是为什么我还是坚持认为云原生是我们未来建立DevOps,以及发展基础设计的最佳实践呢?引用CNCF对云原生的官方定义:
关键词有 开源软件、微服务应用、容器化部署和动态编排 ,虽然我们目前部分业务场景有传输相关的瓶颈,容器化则可能带来更大的存储体积。但从宏观角度来看,这并不是大部分项目的现状,而我们更多的项目核心的问题在于 数据量大、业务和配置复杂、依赖模块多 。而云原生应用天生就和DevOps 是绝配,自带高可用、易维护、高扩展、持续交付的光环,同时原生支持微服务、不可变基础设施以及服务网格这些技术领域,能天然解决业务复杂,依赖模块多的现状。
这也是我在基础设施建设工作中,坚持积累云原生技术方案的原因,云原生的技术方案,我始终认为它能大大推进我司效率建设和技术发展。即便我们在云原生的方案技术积累还不足够,比如还不能确认大数据在容器中运行的效率这类技术问题,但是当我们建设起更具效率的运营一体化流程,也就有更多的资本去进行试错,这片星辰大海等待我们去探索。
我们都期待完美,但在绝大多数时候,任何事情都不可能完美。软件更是如此,DevOps亦是如此。我们能做的就是基于每次的反馈,一点点的改进流程,一次次的反思提高。在不断的持续改进中,可能永远触及不到完美,但是就像美国著名女演员莉莉·汤姆林(Lily Tomlin)的那句经典名言所说的那样: The road to success is always under construction.(通往成功的道路,永远在建设之中) 。
目前有没有DevOps解决方案能保证整个软件包生命周期的安全?
有的,比如JFrog的DevOps解决方案,近期JFrog收购了Vdoo之后,他们的产品对于安全性更多了一层保障,能够做到保证软件生命周期的安全。
具体表现在能够使用高级算法适用性扫描进行上下文威胁分析,优先考虑跨多个向量的关键安全漏洞;能够在新漏洞、恶意软件、漏洞利用、后门、供应链风险和其他威胁公开之前自动检测;能够跨多个攻击向量的可行缓解建议切入底线,避免团队在必须筛选数千个可能的漏洞时出现“警觉疲劳”和噪音;能够将安全性扩展到设备/IoT 上的嵌入式软件,以及固件扫描和唯一识别已编译 C/C++ 应用程序组件中的漏洞;能够将发现的任何安全风险与 40 多种(迄今为止)不同的安全标准和法规相匹配等。
结语:以上就是首席CTO笔记为大家整理的关于devops组件怎么用的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~