当该应用程序无法正常工作时,我最不希望听到的是同事说的“问题就在您这边”。 结果,用户会受苦-但他们并不关心团队的哪一部分负责故障。 DevOps文化的出现只是为了将开发和支持结合在一起,并使他们围绕最终产品的共同责任而团结起来。
DevOps概念包含哪些实践,为什么需要它们? DevOps工程师做什么,他们应该做什么? 来自EPAM的专家回答了这些以及其他问题:系统工程师和DevOps推广人员Kirill Sergeyev,以及公司DevOps团队之一的首席系统工程师和协调员Igor Boyko。

为什么需要DevOps?
以前,开发人员与支持(所谓的运营)之间存在障碍。 这听起来很矛盾,但是尽管他们做了一件共同的事情,但是他们有不同的目标和KPI。 开发目标是尽快实现业务需求并将其添加到工作产品中。 支持人员负责确保应用程序稳定运行-任何更改都会使稳定性受到威胁。 存在利益冲突-DevOps似乎可以解决它。
什么是DevOps?
问题是好的,而且是有争议的:最后,世界尚未就此达成共识。 EPAM相信DevOps将技术,流程和团队内部的互动文化结合在一起。 该协会旨在将价值不断传递给最终用户。
Kirill Sergeyev :“开发人员编写代码,测试人员检查代码,然后管理员在生产环境中安装最终产品。 长期以来,团队中的这些部分有些分散,然后便想到将它们组合成一个通用过程。 这就是DevOps实践的出现方式。”
开发人员和系统工程师对彼此的工作产生兴趣的那一天到来了。 生产和支持之间的障碍开始消失。 DevOps就是这样诞生的,其中包括实践,文化和团队合作。

DevOps文化的本质是什么?
最终结果的责任在于每个团队成员。 DevOps哲学中最有趣和最困难的事情是要了解一个特定的人不仅对其工作阶段负责,而且对整个产品的工作方式负责。 问题不在于任何方面,这很普遍,团队的每个成员都可以帮助解决问题。
DevOps文化最重要的一点是解决问题,而不仅仅是应用DevOps实践。 此外,这些做法不是在“一方”实施的,而是在整个产品中实施的。 该项目不需要自己的DevOps工程师-它需要解决问题的方法,并且DevOps工程师的角色可以分布在具有不同专业知识的多个团队成员中。
DevOps的做法是什么?
DevOps实践涵盖了软件生命周期的所有阶段。
伊戈尔·博伊科(Igor Boyko) :“最理想的情况是,我们在项目开始时就开始使用DevOps实践。 我们与建筑师一道,规划建筑景观将具有什么样的应用程序,它将位于何处以及如何缩放,然后选择平台。 现在,微服务架构非常流行-为此,我们选择一个编排系统:我们需要能够分别管理应用程序的每个元素,并独立于其他元素进行更新。 另一种做法是“基础架构即代码”。 这就是使用代码而不是通过与服务器直接交互来创建和管理项目基础结构的方法的名称。
接下来,我们进入开发阶段。 这里最大的实践之一是构建CI / CD:您需要帮助开发人员更小,更频繁,更轻松地将更改快速集成到产品中。 CI / CD包括代码验证,将向导填充到代码库中以及将应用程序部署到测试和生产环境。
在CI / CD阶段,代码要经过质量检查。 在他们的帮助下,他们验证了从开发人员工作站发出的代码是否符合指定的质量标准。 此处添加了单元和UI测试。 为了快速,轻松而集中地进行产品部署,您可以选择适当的部署类型。
DevOps实践在支持最终产品的阶段中占有一席之地。 它们用于监视,反馈,安全性,更改的实施。 DevOps从持续改进的角度来审视所有这些任务。 我们尽量减少重复操作,使其自动化。 这还包括迁移,应用程序扩展和健康支持。”
为什么DevOps做法有用?
如果我们写一本有关现代DevOps实践的教科书,那么第一页将有三点:自动化,加速发布和快速的用户反馈。
Kirill Sergeev :“首先是自动化。 我们可以自动化团队中的所有交互:我们编写了代码-推出-检查-安装-收集反馈-返回到开始。 所有这些都是自动的。
第二个是加快发布,甚至简化开发。 对于客户而言,始终重要的一点是,该产品应尽快进入市场,并比竞争对手的同类产品更快地受益。 产品交付过程可以无限改善:减少时间,添加其他控制标记,改善监控。
第三是加快用户反馈。 如果他有意见,我们可以立即进行更正并立即更新应用程序。”

“系统工程师”,“建筑工程师”和“ DevOps工程师”之间的关系如何?
它们相交,但属于稍微不同的区域。
EPAM的系统工程师是一个职位。 他们有不同的等级:从初级到首席专家。
建筑工程师更可能是可以在项目中执行的角色。 现在,这是负责CI / CD的人员的名字。
DevOps工程师是在项目上实施DevOps实践的专家。
综上所述,结果是这样的:系统工程师职位的人员在项目中扮演构建工程师的角色,并在其中从事DevOps实践的实施。
DevOps工程师到底在做什么?
DevOps工程师将构成项目的所有部分放在一起。 他们了解程序员,测试人员,系统管理员的工作细节,并有助于简化工作。 他们了解业务的需求和要求,了解其在开发过程中的作用-并在考虑客户利益的前提下构建过程。
我们谈论了很多关于自动化的问题-DevOps工程师首先要做的是。 这是非常重要的一点,其中包括环境的准备。
Kirill Sergeyev :“在对产品进行更新之前,需要在第三方环境上对它们进行测试。 它由DevOps工程师准备。 他们将整个DevOps文化灌输到项目中:他们在其项目的所有层级上都引入了DevOps实践。 这三个原则:自动化,简化,加速-它们将它们带到了可以到达的任何地方。”
DevOps工程师应该知道什么?
总的来说,他应该具有不同领域的知识:编程,使用操作系统,数据库,构建系统和配置。 它们具有使用云基础架构,业务流程,监视系统的功能。
1.编程语言DevOps工程师了解几种自动化的基本语言,并且可以例如告诉程序员:“来吧,您不会手动安装代码,而是借助我们的脚本来自动执行所有操作? 我们将为此准备一个配置文件,方便您和我们阅读它-我们可以随时对其进行更改。 我们将看到谁,何时,为什么对其进行更改。”
DevOps工程师可以学习以下一种或多种语言:Python,Groovy,Bash,Powershell,Ruby,Go。 不需要深入了解它们-只是语法的基础知识,OOP原理,编写用于自动化的简单脚本的能力。
2.操作系统DevOps工程师必须了解将在哪个服务器上安装产品,将在哪个环境中启动产品以及它将与哪些服务交互。 您可以选择专门研究Windows或Linux系列。
3.版本控制系统没有版本控制系统的知识,DevOps工程师就无处可寻。 Git是目前最受欢迎的系统之一。
4.云提供商AWS,Google,Azure-尤其是当我们谈论Windows方向时。
Kirill Sergeyev :“云提供商为我们提供了完全适合CI / CD轨道的虚拟服务器。
安装十台物理服务器大约需要一百次手动操作。 必须手动启动,安装和配置所需的操作系统,然后在这十台服务器上安装我们的应用程序,然后再十次检查所有内容。 云服务用十行代码代替了此过程,并且出色的DevOps工程师应该能够处理它们。 因此,他为客户和公司节省了时间,精力和金钱。”
5.编排系统:Docker和KubernetesKirill Sergeyev :“虚拟服务器分为多个容器,我们可以在每个容器中安装应用程序。 当有很多容器时,您需要管理它们:一个打开容器,另一个关闭容器,在某个地方进行备份。 这已成为需要协调系统的相当复杂的事情。
以前,每个应用程序都使用单独的服务器-操作中的任何更改都可能影响应用程序的运行状况。 由于有了容器,应用程序变得孤立起来并可以单独运行-每个应用程序都在自己的虚拟机上。 如果发生故障,则无需浪费时间寻找原因。 销毁旧容器并添加新容器更加容易。”
6.配置系统:Chef,Ansible,Puppet当需要维护服务器群时,您必须执行许多相同的操作。 这是漫长而艰巨的,甚至手工操作也会增加出错的机会。 这是配置系统可以解决的地方。 在他们的帮助下,他们创建了一个便于程序员,DevOps工程师和系统管理员阅读的脚本。 该脚本有助于自动在服务器上执行相同的操作。 因此,手动操作(以及因此的错误)变得更少了。
DevOps工程师可以从事哪些职业?
您可以水平和垂直进行显影。
Igor Boyko :“从横向发展的角度来看,DevOps工程师现在拥有最广阔的前景。 一切都在不断变化,您可以通过多种方式建立技能:从版本控制系统到监视,从配置管理到数据库。
如果员工有兴趣了解应用程序在其生命周期的各个阶段(从开发到支持)的工作方式,则可以成为系统架构师。”
如何成为一名DevOps工程师?
- 阅读Phoenix项目书籍和DevOps手册。 这些是DevOps哲学的真正支柱,第一部是艺术小说。
- 从上面的列表中学习技术:通过自己的课程或在线课程。
- 作为DevOps工程师加入一个开源项目。
- 在您的个人和工作项目上练习并提供DevOps练习。