虚拟指南:使用开源工具创建DevOps链


通过五个步骤为初学者创建第一个DevOps链。


DevOps已成为太慢,零散和其他有问题的开发过程的灵丹妙药。 但是您只需要很少的DevOps知识。 它将涵盖诸如DevOps链之类的概念以及如何通过五个步骤创建它。 这不是完整的指南,而只是可以扩展的“鱼”。 让我们从故事开始。


我对DevOps的了解


我曾经在花旗集团(Citi Group)处理云,并开发了IaaS Web应用程序来管理花旗的云基础架构,但是我一直对如何优化开发链和改善开发人员之间的文化感兴趣。 我们的云架构和基础架构技术总监Greg Lavender在Phoenix Project一书中为我提供了建议。 在阅读小说的同时,她完美地解释了DevOps的原理。


背面的表格显示了公司推出新版本的频率:



亚马逊,谷歌和Netflix如何成功推出这么多产品? 很简单:他们想出了如何创建几乎完美的DevOps链。


在花旗,直到我们切换到DevOps之前,一切都是完全错误的。 然后我的团队拥有不同的环境,但是我们手动将其交付给开发服务器。 所有开发人员只能访问一台基于IBM WebSphere Application Server社区版的开发服务器。 通过同时尝试交付,服务器“崩溃了”,并且每次我们不得不“痛苦地”彼此同意。 我们还没有足够的代码覆盖测试,繁琐的手动交付过程,也无法根据某些任务或客户要求来跟踪代码的交付。


显然,迫切需要做一些事情,我找到了一个志趣相投的同事。 我们决定一起创建第一个DevOps链-他安装了虚拟机和Tomcat应用程序服务器,然后我接手了Jenkins,将其与Atlassian Jira和BitBucket集成在一起,并通过测试涵盖了代码。 该项目是成功的:我们完全自动化了开发链,实现了开发服务器几乎100%的正常运行时间,能够通过测试来跟踪和改善代码覆盖率,并且Git分支可以与Jira交付和任务链接。 而且,我们构建DevOps链的几乎所有工具都是开源的。


实际上,该链被简化了,因为我们甚至没有使用通过Jenkins或Ansible进行的高级配置。 但是我们做到了。 也许这是帕累托原则(又称80/20规则)的结果。


DevOps和CI / CD链的简要说明


DevOps具有不同的定义。 与敏捷类似,DevOps包含多种学科。 但是大多数人都同意以下定义:DevOps是软件开发的方法或生命周期,其主要原理是创建一种文化,在这种文化中,开发人员和其他员工“处于同一水平”,人工劳动是自动化的,每个人都在尽力而为交货频率增加,生产率提高,灵活性提高。


而且,尽管仅靠工具还不足以创建DevOps环境,但是没有它们就无法做。 其中最重要的是持续集成和持续交付(CI / CD)。 每个环境的链中都有不同的阶段(例如,DEV(开发),INT(集成),TST(测试),QA(质量控制),UAT(用户接受测试),STG(准备),PROD(使用),手动任务是自动化的,开发人员可以创建高质量的代码,进行交付并可以轻松地对其进行重建。


这篇文章描述了如何使用开源工具分五个步骤创建DevOps链,如下图所示。



让我们开始做生意。


步骤1:CI / CD平台


首先,您需要一个CI / CD工具。 Jenkins是在MIT许可下用Java编写的开源CI / CD工具,它开始了DevOps运动的普及,并已成为CI \ CD的事实上的标准。


詹金斯是什么? 想象一下,您拥有一个神奇的控制面板,可用于各种服务和工具。 CI / CD工具本身(例如Jenkins)是没有用的,但是使用不同的工具和服务,它变得无所不能。


除了Jenkins,还有许多其他开放工具,可以选择任何一种。



使用CI / CD工具的DevOps流程如下所示



您在localhost中有一个CI / CD工具,但没什么可做的。 让我们继续下一步。


步骤2:版本控制


测试CI / CD工具的魔力的最佳方法(也许是最简单的方法)是将其与源代码管理管理(SCM)工具集成在一起。 为什么需要版本控制? 假设您提出申请。 您可以用Java,Python,C ++,Go,Ruby,JavaScript或其他任何语言(包括一个小车和一个小推车)来编写它。 您编写的内容称为源代码。 首先,特别是如果您一个人工作,可以将所有内容保存到本地目录。 但是,随着项目的发展和更多人的加入,您需要一种共享代码更改的方法,但同时要避免合并更改时发生冲突。 而且,您还需要以某种方式还原以前的版本,而无需使用备份,也无需对带有代码的文件使用复制粘贴方法。


而且这里没有任何SCM。 SCM将代码存储在存储库中,管理其版本并在开发人员之间进行协调。


有许多SCM工具,但是Git应该成为事实上的标准。 我建议您使用它,但还有其他选择。



这就是添加SCM之后的DevOps管道的样子。



CI / CD工具可以自动执行源代码和团队协作的加载和卸载。 还不错吧 但是,现在如何使它成为受到数十亿用户喜爱的应用程序呢?


步骤3:建立自动化工具


一切都按预期进行。 您可以上载代码并在版本控制系统中记录更改,也可以邀请朋友与您一起工作。 但是您还没有申请。 为了使它成为Web应用程序,必须将其编译并放入包中以进行交付或作为可执行文件运行。 (不需要编译诸如JavaScript或PHP之类的解释性编程语言。)


使用装配自动化工具。 无论您选择哪种工具,它都会以正确的格式收集代码并自动执行清理,编译,测试和交付。 生成工具因语言而异,但是通常使用以下开源选项。



太好了! 现在,我们将组装自动化工具配置文件插入版本控制系统,以便CI / CD工具将其组装。



看来一切都很好。 但是现在将其全部推广到哪里?


步骤4:Web应用程序服务器


因此,您具有可以执行或推出的打包文件。 为了使该应用程序真正有用,它必须具有某种服务或接口,但是您需要将其全部放置在某处。


Web应用程序可以托管在Web应用程序服务器上。 应用程序服务器提供了一个环境,您可以在其中执行程序包中的程序逻辑,执行接口渲染以及通过套接字打开Web服务。 您需要HTTP服务器和其他几个环境(例如虚拟机)来安装应用程序服务器。 现在,让我们假设您在此过程中处理了所有这些问题(尽管我将在下面讨论容器)。


有几个开放的Web应用程序服务器。



我们几乎已经获得了DevOps工作链。 干得好!



原则上,您可以在这里停下来,然后可以自己做,但是值得讨论一下代码的质量。


步骤5:测试覆盖率


测试需要花费大量时间和精力,但是最好立即发现错误并改进代码以取悦最终用户。 为此,有许多开放工具不仅可以测试代码,还可以建议如何改进代码。 大多数CI / CD工具都可以连接到这些工具并使过程自动化。


测试分为两部分:用于编写和执行测试的测试框架,以及带有一些可以提高代码质量的技巧的工具。


测试框架



质量提示工具



这些工具和框架中的大多数都是为Java,Python和JavaScript编写的,因为C ++和C#是专有的(尽管GCC是开源的)。


我们应用了测试覆盖率工具,现在DevOps管道应类似于手册开头的图片。


附加步骤


货柜


如我所说,应用程序服务器可以托管在虚拟机或服务器上,但是容器更为流行。


什么是容器 ? 简而言之,在虚拟机中,操作系统通常比应用程序占用更多的空间,并且一些库和配置通常足以容纳一个容器。 在某些情况下,无法放弃虚拟机,但是容器将应用程序与服务器保持在一起,而无需支付额外费用。


对于容器,尽管还有其他选择,但它们通常采用Docker和Kubernetes。



Opensource.com上阅读有关Docker和Kubernetes的文章:



中间件自动化工具


我们的DevOps链专注于共同构建和交付应用程序,但是使用DevOps工具可以完成其他有趣的事情。 例如,将基础结构用作代码(IaC)工具,也称为中间件自动化工具。 这些工具可帮助自动执行中间件的安装,管理和其他任务。 例如,自动化工具可以使用具有正确配置的应用程序(Web应用程序服务器,数据库,监视工具)并将它们滚动到应用程序服务器。


以下是开放式中间件自动化工具的一些选项:



Opensource.com上文章的详细信息:



现在呢?


这只是冰山一角。 DevOps链可以做更多的事情。 从CI / CD工具开始,然后找出其他可以自动化的方法,以使您的工作更轻松。 不要忘了开放的沟通工具来进行有效的协作。


这是针对初学者的一些关于DevOps的好文章:



您还可以将DevOps与开放式工具集成以实现敏捷:


Source: https://habr.com/ru/post/zh-CN451508/


All Articles