DevOps 在软件开发行业中掀起的变革浪潮仍在持续,无论是先行的互联网企业,还是信息化转型中的传统企业 IT 部门,越来越多的企业在研发战略层面开始采用 DevOps 方法。与此同时,各大调查报告都显示 DevOps 工程师已成为全球收入最高的职位之一。
无论是人才市场需求,还是收入薪资水平,种种迹象表明,DevOps 工程师已经成为当今最炙手可热的岗位,收入也攀升至 IT 行业的金字塔顶端。这意味着企业中的开发者也要顺应时代潮流,适时地更新自己的技能树,及时掌握 DevOps 技能。
在 DevOps 模式中,最核心的要义是通过跨团队协作在短时间内交付高价值的软件功能。因此,DevOps 工程师除了要具备软件工程师基本的编程能力以外,还需要特定的人际交往、工具使用等技能。换句话说,DevOps 工程师需要“软”、“硬”技能兼备,具体如下:
DevOps 是一种横跨软件开发、测试和部署的协作方法。它将原本具有不同目标的开发、测试和运维小团队聚集在一起,以实现更高效和高质量的代码发布,这就要求 DevOps 流程中的不同角色之间不能有任何交流障碍。因此,良好的沟通技巧(无论是口头还是书面)对于优秀的 DevOps 工程师来说是必不可少的。
工程师需要定期与参与 DevOps 流程的内部管理团队交谈,并熟悉目标、路线图、阻塞问题和其他项目所涉及的内容。此外,很多情况下还需要围绕支持问题与客户进行有效沟通。
除了沟通能力以外,协作能力也很重要。DevOps 是团队合作的开发模式,每个工程师都是团队成员,需要在整个软件迭代过程中支持其他同事的工作。这不仅仅要求我们成为一名优秀的队友,还要在适当的时候给新人一些建议,包括但不限于指导和建议团队成员交付代码的最佳方式、编码时使用哪些工具以及如何测试最新功能。这就要求我们自身也要对这些 DevOps 流程中的必要技能有所了解。
除了协作和沟通这样的“软”技能之外,DevOps 工程师还必须知道如何使用各种复杂工具协同工作以支持软件交付目标,这是成为一个优秀的 DevOps 工程师所必备的“硬”技能。
DevOps 工程师需要知道如何使用和理解以下类型工具的作用:
版本控制工具
详细地说,集合了代码审查、合并功能的版本控制工具是能让多个开发人员之间完美协作的主要DevOps 工具。由于 DevOps 流程汇集了来自各个部门的专家,所以他们需要了解源代码控制系统,以及系统跟踪不同应用程序中的更改。此外,它还维护应用程序的多个版本。
目前 DevOps 流程中常用的版本控制系统都基于开源分布式版本控制系统 Git,例如 GitHub、Gitee、GitLab 以及各大厂商基于 Git 定制的内源协作工具。
持续集成工具
持续集成(CI)是 DevOps 的关键技能之一,它是构建 pipeline 的重要部分。DevOps 要求运营和开发团队使用统一的系统。因此,持续集成所做的就是将开发人员的代码与 master 合并在一起。有了这样的技巧,就可以有效地合并数据。因此,DevOps 工程师一定要知道如何使用一些常用的 CI 工具,例如 GitHub Action、Jenkins、Bamboo、TeamCity、Travis CI 等。
容器与编排工具
容器作为现代微服务与云原生架构的核心技术,提供了关于 DevOps 的三个基本功能,包括持续的实验、流动和反馈。容器技术的不可变基础设施实现了操作系统层虚拟化,不仅方便运维程序升级和部署,还升华成了向应用代码隐藏环境复杂性的手段,成为推广分布式服务的必要前提。
目前,Docker 仍然是应用最广泛的容器技术,而以容器编排引擎 Kubernetes 为核心的云原生技术栈则是各大互联网企业构建容器技术基础设施的事实标准。
自动化工具
自动化是软件开发过程中必不可少的要素之一。几乎所有的手工任务都可以使用各种脚本语言自动完成。例如,Ruby、Bash、Python、Node、Shell 等等。可以说,使用自动化开发工具已经成为了很多 DevOps 团队加快开发和部署过程的关键。想要成为 DevOps 工程师,掌握自动化工具很有必要。
除了上述特定技术栈带来的自动化方法外,随着 DevOps 实践在国内企业中越来越流行,开发者对自动化的需求越来越高,降低自动化工具部署门槛成为市场需求,催生了一些开箱即用、集成功能的 DevOps 自动化平台,例如国内的 Gitee、飞算SoFlu软件机器人等。
Gitee 企业版在原代码平台的基础上为企业用户提供了丰富的一站式 DevOps 工具,有效优化了团队之间及技术团队的协作模式,实现代码,文档等软件开发资源的统一和系统管理,帮助团队在开发中学习、成长、修正和完善,建立现代 DevOps 流程。
飞算SoFlu软件机器人是由飞算推出的全自动软件开发工具,从另一个角度帮助开发团队提高 DevOps 研发效率,其包括(后端)全自动开发平台、(前端)全自动开发平台、全自动测试平台和全自动运维平台,不仅可以实现开发组件的可视化,还实现了逻辑的可视化。飞算 SoFlu 软件机器人首先解决的是后端微服务开发,用户绘制可视化流程的过程,即是微服务开发的过程,业务逻辑的设计完全由可视化的方式展现出来,并可通过与前端全自动开发平台、全自动测试平台和全自动运维平台的联动,大大提高 DevOps 团队开发、测试、运维 全流程的工作效率,实现一“人”全栈解决:后端开发、前端开发、测试、运维。
监控和报警工具
DevOps 持续集成和持续部署的实现离不开持续监控的辅助作用。许多微服务都是由数百个组件组合而成,其中一个服务的故障可能导致整个系统崩溃。当然,手动找到核心故障问题是很复杂和耗时的。其中一个解决方案就是持续监控关键特征,如 RAM 使用、请求数量、异常数量和存储空间。因此,需要根据系统的关键特性设置一个警报系统。例如,当存储空间使用率达到 80% 时应该触发警报,以便 DevOps 运维开发人员可以在整个系统崩溃之前解决问题。
常用的监控报警工具包括 ELK 技术栈(E=ElasticSearch,L=Logstash,K=Kibana)、Prometheus 等。
上述每种工具在现代 DevOps 流程中都有特定的用途,DevOps 工程师需要确保这些常用的开发工具在整个研发流程中都能很好地融合在一起,因此熟悉每个工具的作用以及考虑提前准备好这些工具的依赖项,是 DevOps 交付链的关键。
当然,以上提到的这些工具可能并不完全。技术工具一直在飞速迭代,保持对新技术的敏感性和持续的学习热情也是一名优秀的工程师应该具备的能力之一。
虽然编程能力是每个开发者最基本的能力,但 DevOps 工程师在这方面仍然有一些更特殊的要求。
通常来说,DevOps 工程师需要在专精 1-2 门编程语言的基础上熟悉多种语言,例如 Java、JavaScript、Ruby、Python、PHP、Go 等,这是由微服务时代同一系统不同服务可以由不同语言、不同框架实现的特性而决定的。DevOps 工程师至少需要了解这些语言的特性并具备在操作系统环境中编写和调试它们的能力。
DevOps 工程师应该应用这些编码技能来编排尽可能自动化的稳定高效的 pipeline,或者构建可以自动化 pipeline 中的各个阶段的新工具,以优化团队的研发流程。
更重要的是,DevOps 工程师必须掌握测试自动化的实践。这需要首先用多种语言编写干净的代码,然后确保您的代码与其他团队开发的代码完美集成——通常是在不同的环境中创建的。
考虑到 DevOps 代码长期频繁迭代的特性,DevOps 工程师必须始终与 QA 团队保持同步。DevOps 工程师必须了解所有测试活动,包括自动和手动测试活动,以确保组织满足发布日期和结果的 sprint 目标。DevOps 工程师应该了解团队中所有发生的测试活动,整个 CI/CD 周期的测试历史和由 QA 决定的开发框架/环境。
有了这些知识,DevOps 工程师可以确定部署和优化的相关步骤,并确定是否有 QA 活动、工具和框架可以重用于 DevOps 中的其他任务,例如重现生产问题、使用特定测试环境和访问QA 使用的平台。
值得一提的是,转向 DevOps 并不意味着 DevOps 工程师必须自动化一切,在一些必要的方面手动测试仍将继续发挥作用,即使在快速发展的 CI/CD 环境中也是如此。与任何其他自动化任务一样,自动化 100% 的测试活动是不切实际的,DevOps 工程师必须为手动和引导式探索性测试留出空间并保持开放的心态。
优秀的 DevOps 工程师不仅需要开发方面的技能,有时还需要为客户提供维护和技术支持。这意味着 DevOps 工程师应该乐于为内部和外部客户提供支持,并在出现问题时进行故障排除。
随着市场的不断发展,DevOps 工程师的角色自然而然地会承担更多责任——尤其是来自开发技能本身以外的部分,而善用工具,不断提升自己的综合能力,能够帮助工程师在 DevOps 时代获得更强的竞争力。