什么是 DevOps 工程师?
DevOps 工程师必须具备跨越开发和运营的技能,以及人际交往能力,以帮助弥合孤立团队之间的分歧。
Tom Hall
DevOps 推广人员和从业人员
当组织扎根于开发和运营团队分开工作的孤立结构中时,实施 DevOps 通常需要进行组织改革。成功实现 DevOps 需要合适的人员、文化和工具。然而,Atlassian 2020 DevOps 趋势调查表明,实施 DevOps 的最常见障碍之一便是员工技能的匮乏。
实施 DevOps 重组的其中一个关键角色就是 DevOps 工程师。DevOps 工程师必须具备跨越开发和运营的各种技能,还必须具备人际交往能力,以弥合孤立团队之间的分歧。
什么是 DevOps 工程师?
DevOps 工程师是 IT 通才,他们应该对开发和运营都有广泛了解,包括编码、基础架构管理、系统管理和 DevOps 工具链。DevOps 工程师还应具备人际交往能力,因为他们可以跨公司的孤立部门工作,以创建更具协作性的环境。
DevOps 工程师不仅需要深入了解通用系统架构、调配和管理,还必须具备使用传统开发人员工具集和实践的经验,例如:使用源控制、提供和接收代码审查、编写单元测试以及熟悉敏捷开发原则。
角色和职责
DevOps 工程师的角色因组织而异,但都需要具备发布工程、基础架构调配和管理、系统管理、安全性和 DevOps 推广等方面的综合能力。
查看解决方案
适用于整个团队的 DevOps 工具
培训课程
了解 Atlassian DevOps 的要点
发布工程包括构建和部署应用代码所需的工作。实际的工具和流程存在很大差异,具体取决于多个变化因素,如编写代码的语言、管道的自动化程度,以及生产基础架构是位于本地还是云端。发布工程可能需要选择、调配和维护 CI/CD 工具,或是编写和维护定制的构建/部署脚本。
基础架构调配和系统管理包括部署和维护托管应用所需的服务器、存储和网络资源。对于拥有本地资源的组织来说,这可能包括管理数据中心的物理服务器、存储设备、交换机和虚拟化软件。对于混合型组织或完全基于云的组织来说,这通常包括调配和管理相同组件的虚拟实例。
DevOps 推广经常会被低估或完全忽视,但却可以说是 DevOps 工程师最重要的角色。DevOps 文化转变可能会对工程团队成员造成干扰,使其感到困惑。作为 DevOps 主题专家,DevOps 工程师应负责在整个组织中推广和传播 DevOps 方式。
DevOps 工程师的九大技能
DevOps 工程师所需的技术能力根据团队结构、技术和所使用的工具集而有所不同。然而,强大的沟通和协作能力必不可少。对于 DevOps 工程师而言,深入了解交付管道的所有组成部分以及可用工具和服务的利弊同样至关重要。
1. 沟通和协作
对 DevOps 工程师来说,与团队、经理和客户进行有效的沟通和协作非常重要。这些所谓的“软技能”常常会被忽视和低估,但 DevOps 的成功在很大程度上取决于整个价值流中的反馈质量和数量。
2. 系统管理
DevOps 工程师将具有系统管理方面的经验,例如:调配和管理服务器、部署数据库、安全监控、系统修补以及管理内部和外部网络连接。
3. 使用 DevOps 工具的经验
由于使用正确的工具对 DevOps 实践至关重要,因此 DevOps 工程师必须了解并且能够使用各种工具。这些工具涵盖整个 DevOps 生命周期,从基础架构和构建到监控和运营产品或服务的工具。
4. 配置管理
DevOps 工程师通常需要具备使用一种或多种配置管理工具(如 Chef、Puppet 或 Ansible)的经验。许多组织已经采用了这些工具或类似工具来自动完成系统管理任务,例如:部署新系统或将安全补丁应用于已在运行的系统。
5. 容器和容器编排
借助 Docker 推广的容器化技术,应用代码及其运行时环境被捆绑在同一个映像中。这就降低了传统配置管理工具的必要性。与此同时,管理容器也具有其自身的挑战,并且使用称为“容器编排器”之类的工具(例如:Docker Swarm 或 Kubernetes)已成为 DevOps 工程师的必备技能。
6. 持续集成和持续部署
持续集成和持续交付 (CI/CD) 是 DevOps 软件开发方法的核心实践,由众多可用工具支持。所有 CI/CD 工具或工具集的最基本功能就是自动完成构建、测试和部署软件的流程。
通常情况下,DevOps 工程师应具有配置和部署一个或多个 CI/CD 工具的经验,并且需要与开发组织的其他人员密切合作,以确保有效地使用这些工具。
7. 系统架构和调配
DevOps 工程师应能设计、调配和管理本地或云端计算机生态系统。了解基础架构即代码 (IaC) 非常重要,这是一种将 DevOps 软件开发的最佳实践应用到云基础架构资源管理的 IT 管理流程。DevOps 工程师应了解如何使用 Amazon Web Services (AWS)、AWS CloudFormation 或 Terraform 在云端进行系统基础架构建模。
8. 熟悉代码和脚本编写
许多传统的系统管理员都有编写 Shell 脚本来自动完成重复任务的经验。DevOps 工程师不仅要编写自动化脚本,还要了解高级软件开发实践以及如何实现敏捷开发实践(例如:代码审查和使用源控制)。
9. 协作管理技能
无论具体的组织结构如何,跨团队协作都是富有成效的 DevOps 战略的基本组成部分。无论工程团队是仅按角色划分的小组,还是有单独的团队负责功能开发、质量保证、DevOps 等,DevOps 工程师都应以教练和同事的身份在组织内部与各种人员开展协作。
例如,DevOps 投资最有价值的一项回报就是能够更快速地向开发人员提供反馈。通常情况下,DevOps 工程师必须与 QA 合作(无论他们是手动测试人员,还是编写测试自动化功能的开发人员),以提高测试方法的速度、效率和输出。
同时,在改进构建和部署应用代码的过程中,开发人员可能需要 DevOps 工程师的支持。
DevOps 团队:其他角色和职责
DevOps 宣传员
这是一位 DevOps 专家,负责在组织内部推广和推动 DevOps 实践。DevOps 宣传员通常具有强大的技术背景,但该角色侧重于人际沟通和流程改进。
发布经理/变更咨询委员会
尚未过渡到 DevOps 或仍处于 DevOps 早期阶段的组织可能会有一个名为变更咨询委员会 (CAB) 的独立小组或单独的发布经理角色。
这些角色旨在确保投入生产的所有新应用软件都符合质量和安全标准要求,并且获得相关管理层的批准。
在软件发布风险较大时,这些角色尤为重要。然而,随着自动测试和暗部署等策略的使用,这些角色的重要性降低了(如果不是过时的话)。
自动化专家
每位 DevOps 工程师都应具备自动化方面的专业知识。然而,一个组织拥有独立的自动化专家或自动化工程师角色也并非奇闻。他可能是专注于管理 CI/CD 工具或开发和维护自动化测试套件的人员。
软件开发人员
多数情况下,软件开发人员是指编写前端或后端应用代码或同时编写这两种应用代码的人员。在敏捷思维兴起之前,这些人过去被称为“计算机编程人员”。
质量保证
质量保证 (QA) 团队负责发现软件中的故障。过去,QA 工程师专注于手动测试新的应用代码,以确保它不会立即崩溃(“烟雾测试”)、破坏现有功能(“回归测试”)或与任何其他新功能冲突(“集成测试”)。
越来越多的组织使用软件开发测试工程师 (SDET) 角色来补充或取代手动测试人员。SDET 专注于在新应用代码投入生产之前对其进行测试。但是,此角色不是手动测试软件,而是专注于编写测试自动化代码。
安全工程师
未采用将安全性和遵从性问题完全集成到规划和开发流程中的理念的组织,通常会安排一个人或团队负责安全性。这经常被证明是一种反模式,因为它使安全性成为马后炮,而且与在设计时考虑安全性相比,在设计、构建和部署软件之后确保软件的安全性要困难得多。
超越单一角色
DevOps 是一种需要文化变革、新的管理原则和使用技术工具的实践。DevOps 工程师是 DevOps 转型的核心,必须具备广泛的技能来推动这一变革。然而,大多数组织需要的不仅仅是一名 DevOps 工程师,而是通才和专家的混合型人才,以便彼此密切合作,实现 DevOps 并改善软件开发生命周期。DevOps 工程师可帮助打破孤岛,促进不同专家之间以及跨工具链的协作,从而实现 DevOps 的完整愿景。
Atlassian 的 Open DevOps 为团队提供了开发和操作软件所需的一切工具。借助与领先供应商和市场应用的集成,团队可以构建他们想要的 DevOps 工具链。因为我们坚信团队应该按照他们想要的方式工作,而不是按照供应商想要的方式工作。立即试用。
分享此文章
下一主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。