DevOps在软件开发行业中掀起的变革浪潮仍在持续,无论是先行的互联网企业,还是信息化转型中的传统企业IT部门,越来越多的企业在研发战略层面开始采用DevOps方法。与此同时,各大调查报告都显示DevOps工程师已成为全球收入最高的职位之一。
无论是人才市场需求,还是收入薪资水平,种种迹象表明,DevOps工程师已经成为当今最炙手可热的岗位,收入也攀升至IT行业的金字塔顶端。这意味着企业中的开发者也要顺应时代潮流,适时地更新自己的技能树,及时掌握DevOps技能。
在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工具,例如GitHubAction、Jenkins、Bamboo、TeamCity、TravisCI等。
容器与编排工具
容器作为现代微服务与云原生架构的核心技术,提供了关于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工程师必须掌握测试自动化的实践。这需要首先用多种语言编写干净的代码,然后确保您的代码与其他团队开发的代码完美集成——通常是在不同的环境中创建的。
四、与QA团队同步
考虑到DevOps代码长期频繁迭代的特性,DevOps工程师必须始终与QA团队保持同步。DevOps工程师必须了解所有测试活动,包括自动和手动测试活动,以确保组织满足发布日期和结果的sprint目标。DevOps工程师应该了解团队中所有发生的测试活动,整个CI/CD周期的测试历史和由QA决定的开发框架/环境。
有了这些知识,DevOps工程师可以确定部署和优化的相关步骤,并确定是否有QA活动、工具和框架可以重用于DevOps中的其他任务,例如重现生产问题、使用特定测试环境和访问QA使用的平台。
值得一提的是,转向DevOps并不意味着DevOps工程师必须自动化一切,在一些必要的方面手动测试仍将继续发挥作用,即使在快速发展的CI/CD环境中也是如此。与任何其他自动化任务一样,自动化%的测试活动是不切实际的,DevOps工程师必须为手动和引导式探索性测试留出空间并保持开放的心态。
五、技术支持和维护技能
优秀的DevOps工程师不仅需要开发方面的技能,有时还需要为客户提供维护和技术支持。这意味着DevOps工程师应该乐于为内部和外部客户提供支持,并在出现问题时进行故障排除。
总结
随着市场的不断发展,DevOps工程师的角色自然而然地会承担更多责任——尤其是来自开发技能本身以外的部分,而善用工具,不断提升自己的综合能力,能够帮助工程师在DevOps时代获得更强的竞争力。