DevOps工程师必须具有跨越开发和运营的技能,以及人际交往能力,以帮助消除孤立的团队之间的分歧。
当组织扎根于孤立的结构中(开发和运营分别工作)时,实施DevOps通常需要对组织进行大修。它需要合适的人员,文化和工具来成功实施DevOps。根据2020 DevOps趋势调查显示,实施DevOps的最常见障碍之一是员工缺乏技能。
DevOps工程师是实施DevOps重组的关键角色之一。这个人必须拥有涵盖开发和运营的广泛技能,还必须具备人际交往能力,以弥合孤立团队之间的分歧。
什么是DevOps工程师?
DevOps工程师是一位IT专家,应该对开发和操作都有广泛的了解,包括编码,基础架构管理,系统管理和DevOps工具链。DevOps工程师还应该具有人际交往能力,因为他们跨公司孤岛工作以创建更加协作的环境。
DevOps工程师需要对通用系统架构,供应和管理有深刻的了解,还必须具有传统开发人员工具集和实践的经验,例如使用源代码控制,提供和接收代码审查,编写单元测试以及熟悉敏捷性。原则。
角色和责任
DevOps工程师的角色在一个组织之间会有所不同,但始终需要将发布工程,基础结构配置和管理,系统管理,安全性以及DevOps倡导进行某种组合。
发布工程包括构建和部署应用程序代码所需的工作。确切的工具和过程在很大程度上取决于许多变量,例如,编写代码所用的语言,已自动化的管道数量以及生产基础结构是内部部署还是云计算。发布工程可能需要选择,供应和维护CI / CD工具,或者编写和维护定制的构建/部署脚本。
基础架构供应和系统管理包括部署和维护托管应用程序所需的服务器,存储和网络资源。对于拥有本地资源的组织,这可能包括管理数据中心中的物理服务器,存储设备,交换机和虚拟化软件。对于混合或完全基于云的组织,这通常将包括供应和管理相同组件的虚拟实例。
DevOps的倡导通常被低估或被完全忽略,但是可以说是DevOps工程师最重要的角色。向DevOps文化的转变可能会给工程团队成员带来破坏性的影响和混乱。作为DevOps主题专家,DevOps工程师应负责在整个组织中传播和教育DevOps方法。
DevOps工程师技能
DevOps工程师所需的技术技能将根据所使用的团队结构,技术和工具集而有所不同。但是,强大的沟通和协作技能至关重要。对于DevOps工程师来说,对交付管道的所有组件有扎实的了解,并了解可用工具和服务的利弊也很重要。
沟通与协作
对于DevOps工程师而言,与团队,经理和客户进行有效的沟通和协作非常重要。这些所谓的“软技能”通常会被忽视和低估,但是DevOps的成功很大程度上取决于整个价值流中反馈的质量和数量。
系统管理
DevOps工程师将具有系统管理方面的经验,例如调配和管理服务器,部署数据库,安全监控,系统补丁以及管理内部和外部网络连接。
使用DevOps工具的经验
由于使用正确的工具对于DevOps实践至关重要,因此DevOps工程师必须了解并能够使用多种工具。这些工具涵盖从基础架构和构建到监视和操作产品或服务的DevOps生命周期。
配置管理
经常会期望DevOps工程师具有一个或多个Chef,Puppet或Ansible等配置管理工具的经验。许多组织已采用这些或类似工具来自动化系统管理任务,例如部署新系统或将安全补丁应用于已经运行的系统。
容器和容器编排
通过容器化(一种由Docker普及的技术),应用程序代码及其运行时环境被捆绑在同一张映像中。这使得传统的配置管理工具变得不必要。同时,管理容器也带来了自己的挑战,使用称为“容器编排器”的工具(例如Docker Swarm或Kubernetes)这类工具的经验成为DevOps工程师的必备技能。
持续集成和持续部署
持续集成和持续交付(CI / CD)是DevOps软件开发方法的核心实践,并由许多可用工具支持。任何CI / CD工具或一组工具中,最基本的功能是自动化构建,测试和部署软件的过程。
DevOps工程师通常将需要配置和部署一个或多个CI / CD工具的经验,并且通常将需要与其他开发组织紧密合作以确保有效地使用这些工具。
系统架构和配置
DevOps工程师应具有设计,配置和管理本地或云中的计算机生态系统的能力。了解基础架构即代码(IaC)是非常重要的,这是一个IT管理流程,将DevOps软件开发中的最佳实践应用于云基础架构资源的管理。DevOps工程师应了解如何使用Amazon Web Services(AWS),AWS CloudFormation或Terraform在云中为系统基础架构建模。
熟悉编码和脚本编制
许多传统的系统管理员都有编写Shell脚本以自动执行重复任务的经验。DevOps工程师不仅应编写自动化脚本,还应了解高级软件开发实践以及如何实施敏捷开发实践,例如代码审查和使用源代码控制。
协作管理技巧
不管具体的组织结构如何,跨团队协作都是有效的DevOps战略的基本组成部分。无论工程团队是仅按角色划分的团队,还是有单独的团队进行功能开发,质量保证,DevOps等,DevOps工程师都应在整个组织中以教练和同事的身份与许多不同的人一起工作。
例如,DevOps投资中最有价值的回报之一就是能够为开发人员提供更快的反馈。DevOps工程师通常必须与QA(无论是手动测试人员还是编写测试自动化的开发人员)一起工作,以提高测试方法的速度,功效和输出。
同时,开发人员在努力改善构建和部署应用程序代码的过程时可能需要DevOps工程师的支持。
DevOps团队:其他角色和职责
DevOps传播者
这是一名DevOps专家,他在整个组织内促进和发展DevOps的实践。DevOps宣传人员通常具有很强的技术背景,但该角色的重点是人际沟通和流程改进。
发布经理/变更顾问委员会
尚未过渡到DevOps或仍处于过渡阶段的组织可能会有一个单独的小组,称为变更顾问委员会(CAB)或一个单独的发布经理角色。
此类角色的目的是确保发布到生产中的任何新应用软件均符合质量和安全标准,并获得相应的管理批准。
当软件发行风险更大时,这些角色尤其重要。但是,使用自动化测试和黑暗部署等策略,这些角色的重要性不那么重要(如果不是过时的话)。
自动化专家
每位DevOps工程师都应具备自动化方面的专业知识。然而,组织拥有独立的自动化专家或自动化工程师的角色并非闻所未闻。这可能是一个专注于管理CI / CD工具或开发和维护自动化测试套件的人员。
软件开发师
在大多数情况下,标题软件开发人员是授予编写前端或后端应用程序代码或二者兼有的个人的。在敏捷思维兴起之前,这些人在历史上被描述为“计算机程序员”。
质量保证
质量保证(QA)团队负责发现软件故障。质量检查工程师历来专注于手动测试新的应用程序代码,以确保它不会立即崩溃(“烟雾测试”),破坏现有功能(“回归测试”)或与任何其他新功能(“集成测试”)冲突。
组织越来越多地用负责测试的软件开发工程师(SDET)来补充或替换手动测试人员。SDET致力于在将新的应用程序代码投入生产之前对其进行测试。但是,他/她不是手动测试软件,而是专注于编写测试自动化代码。
安全工程师
尚未将安全性和合规性问题完全集成到其计划和开发流程中的组织通常会拥有负责安全性的个人或团队。事实证明,这是一种反模式,因为它使安全性成为事后的考虑,并且在设计,构建和部署软件之后,比设计安全性要难得多。
超越单一角色
DevOps是一种需要文化变革,新的管理原则和使用技术工具的实践。DevOps工程师是DevOps转型的核心,必须具备广泛的技能来促进这一变化。然而,大多数组织将不仅需要一名DevOps工程师,而且需要通才和专家的共同努力才能实现DevOps并改善软件开发生命周期。DevOps工程师可帮助解决各种孤岛,以促进不同专家之间以及整个工具链之间的协作,从而实现DevOps的全部希望。