导读:今天首席CTO笔记来给各位分享关于devops怎么搭建的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
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是什么?
这是最近一大学习方向,找工作也想找这样的运维岗,但devops是什么?别人问起我又该如何解释呢?所以翻翻资料写写文章记录下关于这个名词的所思所想好了。
所谓devops是一种软件开发和运维一体化的方法,也是一种小步快跑的开发模式,也就是将大的需求分割为一个个小目标来完成,与此同时又尽可能维稳。具体操作模式分为五大步,即持续开发、持续测试、持续部署、持续集成和持续监控,然后将监控监测到的情况加以总结后,如果出现了新的改进目标,或者客户提出了新的需求,那么又会再次开启一轮开发\测试\部署.... 继而就形成了,如下所示的一个持续性闭环。
对于软件开发人员而言devops就是敏捷型开发+自动化运维,而对于运维人员来说就是尽可能的实践自动化运维,同时又参与到开发工作中去,这对于不善于软件开发的运维工程师而言应该是不小的考验(至少我工作两三年中,碰见的运维工程师,没哪个愿意做开发的)。
之前知乎上也有看到一些前端工程师也在学习devops,貌似做开发的对于devops热情度挺高的,而对于运维工程师而言大概首要目标就是学习docker以及学习使用那些用来实践 devops运维开发 所需要的工具。要做到devops中重点提及的 持续性 ,搭建并使用起这些工具应该是必不可少的。
如下是查到的比较全的关于devops实践所需要的一些工具(存在文章中,供之后学习用吧)。
(碎碎念,想起以前公司的上司一个35岁左右的工程师,从我入职第一天就开始念叨整个devops的逻辑,还总说运维早晚要被开发取代,总是无限憧憬开发的工作...然而一年零8个月后我都要辞职了,也不见公司实践devops的理论,更别说用起devops相关的工具...其实我总在想,不管是运维也好还是开发,他们身上应该都有一个同样的角色,即problem solver,为了解决问题,运维工程师去学习开发学习编码,做到持续学习应该也是必然的吧)
什么是DevOps?
DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
引入DevOps的因素:
1、使用敏捷或其他软件开发过程与方法
2、业务负责人要求加快产品交付的速率
3、虚拟化和云计算基础设施(可能来自内部或外部供应商)日益普遍
4、数据中心自动化技术和配置管理工具的普及
5、有一种观点认为,占主导地位的“传统”美国式管理风格(“斯隆模型vs 丰田模型”)会导致“烟囱式自动化”,从而造成开发与运营之间的鸿沟,因此需要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 的那些事
在2008年多伦多举办的敏捷大会(Velocity Conf 2008 )上,Patrick DeBois 和AndrewClay Shafer 先生首次提议讨论“敏捷基础架构”这个话题。在第二年的敏捷大会上有一个具有里程碑的意义技术分享,来自Flickr公司《每天部署10次》的分享,它激发了随后Patrick DeBios在同年十月,在比利时的根特市举办的首届DevOpsDays活动,这个活动是两天的日程,为了大家方便在twitter上的传播,人们把DevOpsDays这个词简写为 “#DevOps” 。 此后,“DevOps”一词问世了,这个词所包含的理念和实践一时在越来越广大的人群中产生了共鸣,随后成为全球IT界在各种大会和论坛里热议和讨论的焦点话题,很多大型IT论坛也都开设出了DevOps专题讨论。这就是DevOps这个词的由来。
DevOpsDays活动随后在Patrick DeBios等相关核心发起人的推动下,在全球范围内蓬勃发展了起来。2010年在美国山景城(Mountain View) 举办的DevOpsDays 活动中,Damon Edwards先生使用“CAMS”这个缩写,高度概括和诠释了DevOps,即文化(Culture)、自动化(Automation)、度量(Measurement or Metrics)和分享(Sharing)。随后Jez Humble先生将“L”精益 (Lean) 原则也加入其中,最终变成了CALMS。
♣ Culture(文化)- 是指拥抱变革,促进协作和沟通
♣ Automation(自动化)- 是指将人为干预的环节从价值链中消除
♣ Lean(精益)- 是指通过使用精益原则促使高频率循环周期
♣ Metrics(指标)- 是指衡量每一个环节,并通过数据来改进循环周期
♣ Sharing(分享)- 是指与他人开放分享成功与失败的经验,并在错误中不断学习改进
“CALMS”完全吻合Patrick DeBois先生所一向倡导的“DevOps is a human problem” (DevOps 是关于人的问题) 的理念 。
从DevOps概念的产生,到如今它在全球范围内的蔓延和认同,已经经历了9个年头的时间。它的火爆推广也伴随着IT行业的迅速变迁和发展,现在已经到了移动互联网时代的后半场,国内的信息化建设已经完成了很多年;如今各行各业的企业也都亟待完成全方位的数字化转型。IT信息技术的先进程度标志着一个企业的核心能力,任何一个成功的企业,敏捷高效的软件开发创新实力和IT管理综合能力不只是门面而已,而是实实在在的市场竞争能力。DevOps倡导打敏捷、持续交付和ITIL三种实践的组合拳,同时应用精益生产理念为基础的管理思想,这正在逐渐地被广泛的接受和认可。
在过去的几年中,国内的各种IT大会也蓬勃发展,其中DevOps相关的专题和分会场也颇受人们的关注。各种云计算、运维等IT技术的社交媒体也都非常重视DevOps这个话题的分享。一个专属于DevOps社群的、国际性的、有影响力的DevOps大会正呼之欲出。在这样的时代背景下DevOpsDays大会北京站在2017年的3月18日来到中国,在同年的8月18日上海,还要举办DevOpsDays Shanghai站的大会。
下面列举一些DevOpsDays大会的相关数据,数据来源于DevOpsDays.org 网站。从2009年到2016年,已经在全球的61个城市/国家成功地举办了117场。
下图是在过去九年中DevOpsDays大会在各个城市/国家的分布和举办次数。
今年也就是2017年预计举办30场,其中已经有18场确定了举办城市和日期;还有12个城市的召开日期待定;这不包括年内还可能会提出申办的城市。以上数据的统计时间在2017年三月。
随着国内BAT等互联网巨头的崛起,互联网公司的开发运维经验也越来越多的在国内的各种技术大会上传播。从最近这两年(2016年和2017年)的技术活动日程中可以看出,国内互联网从业人员也不约而同的用DevOps来定位和分享自己的优势和经验。他们是传播和分享运维侧DevOps实践的先头部队。
出了技术论坛的分享之外,很多线上线下的大会、论坛和讨论组也都越来越热议DevOps这一专题。国内其它相关流派的人群,例如敏捷和精益等,也对DevOps的蓬勃发展表示比较惊讶,DevOps与老牌的敏捷和精益等阵营也产生过一些争论。但这一切的发生也都增加了人们对于DevOps的更深入的兴趣。
在培训认证这方面,Exin DevOps Master是一个国际认证的培训;其它公司和组织也正在举办关于DevOps工具链的培训,这些培训则注重于技术实操,关注在构建端到端的流水线的搭建方面。从DevOps的职位招聘方面,可以看到DevOps工程师相关的职位越来越多了,在职位需求中DevOps这个技能成了加分项,DevOps相关工具的技能也或将成为简历的亮点。在IT行业内不管是开发还是运维团队的人,都开始了学习和接受的过程。
据我观察DevOps方面的厂商在最近3年呈现爆炸式的发展。我把他们分为三类:
目前国内大部分企业慢慢地开始关注了DevOps,大型传统企业也开始逐渐地从各个角度做试点和尝试。试点的角度和方向各不相同,有的从底层基础架构的容器化开始,有的从交付部署流水线的自动化开始;总的来说还处于初级的尝试阶段,还没有大规模成体系的推广。
综上所述,目前国内DevOps发展的阶段还属于起步阶段。就像是ITIL/ITSM在2003年左右的状态。由于DevOps是去中心化的,所以没有唯一、权威的上游厂商的存在,各种理论实践的争执和PK都将终止与解决问题和提高效率的话题上,因此它具有百花齐放百家争鸣的发展条件。个人认为DevOps的实施和落地也不会完全依赖于传统的大型咨询厂商的咨询工作,由于它应该是在企业的内部,在内驱的作用下,自生长出来的;它必须是服务于企业的业务价值流的优化,加速业务价值产出的;而与之相关的工作和责任的担当,外部力量是很难以等量替换和承担的。
在谈这个话题前先看一下DevOps相关工具集的全貌,如下图所示:
最上面的箭头流程图表示了一个业务服务的全生命周期:开发协作、软件构建、质量测试、交付部署和投产运维。前三个阶段偏传统开发组织的工作内容,后两个阶段基本可以和运维组织的工作对应上。在每个阶段下可以看成是一个大分类,这些分类中还包含若干个小分类。这些工具可以粗放的划分为商业软件和开源软件两类;也可以分为SaaS服务类和企业内部部署型。大部分开源工具都有活跃的用户社区和群众基础,这给企业入手这些工具带来了很大的便利。在需要商业支持的场景里还可以选择使用这些开源软件的企业版。
Docker容器技术在最近三年中异军突起,持续交付的技术门槛因此被降到最低,软件生产供应链的格局和效率被彻底提升;基于Docker的微服务架构实践的热度和成熟度也与日俱增。因此,国内的传统企业纷纷试水DevOps和容器技术,在最近两年的各种技术大会中,我们可以看到国内各个行业出现了在不同维度上的DevOps先行者。他们分享的主题大多集中在自动化运维、容器化和PaaS平台的等项目经验。
从国内众多DevOps实践中,我们能看到下面三个技术尤其重要和火热:
以上三种技术相辅相成,有着比较深刻的关联。首先微服务和持续部署各自解决了特别多的传统IT的问题,这些问题都是长期以来制约企业业务发展的难题。容器技术由于它的快速、轻量、微服务化的天然特性,很好的从不同侧面支持了持续交付和微服务架构。容器可以为持续交付提供弹性和高速的系统资源,环境管理和利用率提高了很多;容器的不可变性的特点也更好地支持了微服务架构。
我把DevOps的按照不同的技术特征做了从到1.0 到2.0的时代划分,并尽量通过以下维度比较与传统方式的差异。
我比较认可和接受的企业实践DevOps参考框架如下,其中包含了所需的最佳实践,如下图所示。
(上图来源于:Exin DevOps白皮书)
下面简要描述一下这四大支柱型最佳实践:
由此可见DevOps在企业,特别是大规模传统企业的落地和推广还是比较复杂的。虽然相关的最佳实践都是已经存在了很多年的;但是,通过DevOps的价值观重构企业从研发到交付到运维的价值流谈何容易。基于我的IT从业经验,我似乎感觉到DevOps不能单独依靠自顶向下的推广,当然高层领导的支持依然是重要的和必备的支持条件之一。 可能还需要中层的带动和底层的创新;借鉴生产制造业已经久经考验的精益制造实践也是势在必行。总之DevOps运动会在近几年给IT行业带来较大影响。
结语:以上就是首席CTO笔记为大家介绍的关于devops怎么搭建的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。