本文目录:
- 1、请问:企业如何快速实现DevOps转型?
- 2、什么是DevOps的基石?为什么顶级公司都离不开它?
- 3、devops工具有什么作用?
- 4、DevOps之Operate阶段工具Docker
- 5、DevOps的设计实践
- 6、有没有什么DevOps安全工具?
请问:企业如何快速实现DevOps转型?
提出这个问题首先是否要思考一下:快速实现DevOps转型的目的是什么?
DevOps转型会面临哪些难题,哪些挑战作为CTO的你是否心中清晰?
采用 DevOps 会面临哪些挑战?
原有的习惯很难改变。深陷孤立工作方式的团队可能会难以应对,甚至抗拒彻底改变团队结构以采用 DevOps 实践。某些团队可能会错误地认为有了新工具就足以采用 DevOps。但是,DevOps 是人员、工具和文化的结合。DevOps 团队的每一个人都必须了解整个价值流,从构思、开发到最终用户体验。它要求打破孤岛,以便在整个产品生命周期中进行协作。
最终要明白——
Devops 不是任何一个个人的工作,而是每个人的工作。
从传统的基础架构转向使用基础架构即代码 (IaC) 和微服务可以加快开发和创新速度,但增加的运营工作量可能极具挑战性。最好为自动化、配置管理和持续交付实践奠定坚实的基础,以帮助减负。
过度依赖工具会使团队偏离 DevOps 的必要基础:团队和组织结构。一旦建立了结构,就应该建立流程和团队,然后确定工具。
如何采用 DevOps?而不是如何快速转型为DevOps团队,否则可能欲速则不达。
首先,采用 DevOps 需要致力于评估且可能更改或删除组织当前所用的所有团队、工具或流程。这表示需要构建必要的基础架构,以便团队能够自主构建、部署和管理其产品,而不必过分依赖于外部团队。
DevOps 文化
DevOps 文化是指团队采用新工作方式(包括加强合作和沟通)的环境。这是人员、流程和工具的协调一致,以实现更加统一的客户导向服务。多学科团队负责产品的整个生命周期。
什么是DevOps的基石?为什么顶级公司都离不开它?
CI/CD管道实现,或持续集成/持续部署,是现代DevOps环境的基石。它通过自动化应用程序的构建、测试和部署来弥补开发团队和操作团队之间的差距。在本文中,我们将介绍什么是CI/CD管道以及它是如何工作的。
在进入CI/CD管道之前,让我们先了解一下什么是DevOps?
DevOps是一种软件开发方法,它涉及软件的持续开发、持续测试、持续集成、持续部署,以及在整个开发生命周期中对软件的持续监控。这是所有顶级公司都采用的开发高质量软件和缩短开发生命周期的过程,从而提高客户满意度,这是每个公司都想要的。
想学习DevOps?就需要先理解它的生命周期。我们下面来看看DevOps的生命周期,并探讨一下它与各个软件开发阶段之间的关系。
CI代表了持续集成,而CD则代表着持续交付或持续部署。如上图所示,您可以将其视为类似于软件开发生命周期的一个过程
让我们具体来看看它是如何工作的。上述管道从逻辑的角度演示、说明了软件是如何沿着其生命周期的每个阶段向前移动,直至最终被交付给客户或部署到生产环境中。
让我们假设一个CI/CD的管道场景。例如:您要构建一个Web应用程序,并将它部署到在线的Web服务器上。那么您手头应该有一组负责代码编写的开发团队,他们将进一步去着手构建Web应用程序。
最初,开发团队将软件代码提交到版本控制系统(如git或svn)。接下来,代码进入构建阶段,这是管道的第一个阶段,开发人员将其代码导入其中,进而在打上适当的版本标签之后,再返回到版本控制系统。
假设我们手头已有一些Java程序代码,并且需要在执行之前进行构建。那么在经过了刚才的版本控制阶段,代码再次来到构建阶段,并在此完成编译。所谓构建阶段,实际上就是您从不同的存储库分支处获取该代码的所有特征,通过合并,最后使用编译器来对它进行编译的整个过程。
一旦完成了构建,我们就进入到了测试阶段。在此阶段中,我们将采取各种测试,其中包括:功能块测试、单元测试、以及可用性测试
在测试完成之后,我们将移步至部署阶段,即:将代码部署到暂存服务器或测试服务器中。在此阶段,您可以通过模拟器来查看具体的代码,及其整个应用程序的运行状况。
一旦成功部署了代码,您就可以开展另一轮可用性测试了。如果一切正常,那么该代码就可以被部署到生产环境了。
同时,如果在任何一个步骤中出现了错误,您完全可以通过电子邮件发回给开发团队,以便他们及时予以修复。然后,他们会将新的代码推送到版本控制系统中,让其重回管道。
此流程周而复始,直到我们完成所有的测试与验证,最终将代码部署并导入生产环境的服务器上。
至此,我们已经了解了CI/CD管道及其工作原理。下面,我们一起来看看何为Jenkins、如何通过Jenkins来部署演示性代码、以及自动化整个过程。
CI工具及其他在CI/CD管道中的重要性。
我们的任务是:从开发团队提交代码,到我们将其投入生产环境的全过程,实现自动化。因此,为了在整个软件开发生命周期中实现DevOps管道的自动化模式,我们需要用到一些相应的自动化工具。
Jenkins为我们提供了各种接口和工具,来自动化整个软件交付的过程。
首选,我们需要有一个Git的存储库,以供开发团队提交他们的代码。然后,Jenkins就从此处开始“接手”。它是一款前端工具,您可以自定义整个工作流或任务。在此,我们的工作就是要确保对特定工具、或特定应用程序,实现持续集成与交付的过程。
从Git的角度而言,Jenkins采取的是“拉代码”的模式,然后Jenkins转向交付阶段,实现从各个分支提交代码。构建阶段主要进行的是代码编译。如果是Java代码,我们可以使用Jenkins中诸如maven之类的工具,来编译代码,并且通过运行一系列测试来实现部署。同样,这些测试案例也都是由Jenkins来进行“监管”的。
之后,代码被转移到缓存服务器上,以便使用Docker来进行部署。最后,在经过一系列单元测试和可用性测试之后,代码“流入”生产环境。
Docker是一个虚拟环境,我们可以在其中创建服务器。实际上,创建一整台服务器、并部署需要测试的工件也只需要几秒钟的时间。
那么我们该如何使用Docker呢?
如前所述,通过存储库,我们不但可以永久性地存储各种镜像,还能几秒钟之内构建出自己的镜像系统,并且运行整个集群。另外,您还可以在任何环境中随时对它们进行按需复制。
动手实践:使用Docker和Jenkins来构建CI/CD管道
步骤 1:在VM中打开终端,使用以下命令启动Jenkins和Docker:
systemctl start jenkins
systemctl enable jenkins
systemctl start docker
注意: 如果系统显示“特权错误(privileges error)”,请在上述命令之前先使用sudo。
步骤 2:在指定端口上打开Jenkins。单击“新建项目”以创建新的作业。
步骤 3:选择一个自由类型(freestyle)项目,并输入项目的名称(此处我使用的是Job1),然后单击确定。
步骤 4:选择源代码管理(Source Code Management)并点选Git存储库。单击应用并保存(Apply and Save)按钮。
步骤 5:然后依次点击构建(Build) – 选择执行(Execute)Shell。
步骤 6:逐条输入shell命令。在此,它将通过建立存档文件,来产生一个war文件。之后,它通过“拉”的方式获得相关代码,并且使用maven来安装软件包。注意,它只需安装各个依赖项,并对应用程序进行编译。
步骤 7:单击“新建项目”,以创建新的作业
步骤 8:选择自由类型(freestyle)项目,并输入项目的名称(此处我使用的是Job2),然后单击确定
步骤 9:选择源代码管理(Source Code Management)并点选Git存储库。单击应用并保存(Apply and Save)按钮。
步骤 10:然后依次点击构建(Build) – 选择执行(Execute)Shell。
步骤 11:逐条输入shell命令。在此,它将进入集成阶段,并生成相应的Docker容器。
步骤 12:单击“新建项目”,以创建新的作业。
步骤 13:选择自由类型(freestyle)项目,并输入项目的名称(此处我使用的是Job3),然后单击确定
步骤 14:选择源代码管理(Source Code Management)并点选Git存储库。单击应用并保存(Apply and Save)按钮。
步骤 15:然后依次点击构建(Build) – 选择执行(Execute)Shell。
步骤 16:逐条输入shell命令。在此,它将检查Docker的容器文件,然后将其部署到8180号端口上。请单击“保存”按钮。
步骤 17:现在依次点击Job1 – 配置(Configure)。
步骤 18:单击构建后操作(Post-build Actions) – 构建其他项目(Build other projects)。
步骤 19:输入在Job1之后构建的项目名称(此处为Job2),然后单击“保存”。
步骤 20:现在点击Job2 – 配置(Configure)。
步骤 21:单击构建后操作(Post-build Actions) – 构建其他项目(Build other projects)
步骤 22:输入在Job2之后构建的项目名称(此处为Job3),然后单击“保存”。
步骤 23:现在,我们将创建一个管道的视图。请点击“+”号。
步骤 24:选择“构建管道视图(Build Pipeline View)”,并输入视图的名称(此处我命名为CI CD Pipeline)。
步骤 25:选择初始化作业(initialJob,这里我输入了Job1),并单击确定。
步骤 26:单击“运行(Run)”按钮,以启动CI/CD进程。
步骤 27:在成功构建之后,请输入localhost:8180/sample.text。它将能够运行该应用程序。
至此,我们已经了解了如何使用Docker和Jenkins来创建一个CI/CD管道。
记住:DevOps的宗旨就是为了能够更快速、更可靠地创建出更高质量的软件,同时也能促进团队之间更密切的沟通和协作。
DevOps工具有什么作用?
对企业非常有帮助!!!可以提高了企业产品的交付质量、缩短开发周期、减少故障.
DevOps之Operate阶段工具Docker
部署过程,会采用Docker进行部署,暂时只安装Docker即可,后续还需安装Kubenetes
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 Xray。它能够支持安全机制妥当地融入 DevOps 渠道中,智能优先级划分和适用性及上下文分析,以及通过直观的分步修复增强 CVE 数据。支持主要的程序包类型,洞悉软件包、容器映像及压缩文件的依赖项大大,对二进制文件(黑客的攻击面)执行的分析,对二进制文件(黑客的攻击面)执行的分析等等。
本文来源:https://www.yuntue.com/post/106562.html | 云服务器网,转载请注明出处!

微信扫一扫打赏
支付宝扫一扫打赏