由于DevOps的主要目标是为了改善各个利益相关者之间的协作状态,因此从规划、部署到IT项目的运维,它能够实现:
提高部署的频率。
减少更新/修复之间的时间。
实现快速的交付。
缩短恢复的时间。
降低新版本的失败率。
DevOps转型路线图
根据软件开发的生命周期,DevOps的实施方法一般分为如下三个主要阶段:
构建(DevOps持续集成)。
测试(DevOps持续测试)。
发布(DevOps持续交付)。
DevOps的主要重点在于:通过简化交付流程和标准化开发环境,以提高交付的效率、安全性和可预测性。DevOps赋予了整个团队构建、交付、验证和支持其软件应用的自主权。它使得开发人员能够更好地了解基础架构,从而更好地控制整个生产环境。
在开始DevOps转型之前,企业首先要定义好现有的业务流程、IT基础架构、以及交付的管道;然后通过制定明确的目标,让DevOps的实施策略真正能够在本企业落地。
尽管在不同的企业中,实现DevOps的方式有所不同,但是与DevOps相关的流程通常会包括如下6个C的阶段:
持续开发 – 持续开发涉及到计划、概述和引入新的代码。持续开发的目的是:优化代码的构建过程,并减少开发和部署之间的用时。
持续集成(CI) – DevOps实施的实践涉及到将开发的代码集成到中央存储库之中。在该存储库中,配置管理(CM)工具与测试开发工具相集成,以跟踪代码的开发状态。此外,CI还包括在测试和开发之间形成快速的反馈,以便能够识别和解决此过程中可能出现的各种代码问题。
持续测试 – 持续测试的目的是:加快代码向生产环境的交付。DevOps在此阶段涉及到更新应用程序的代码,并运行预定的、自动化的代码测试。
持续交付 – 持续交付旨在:快速、持续地交付那些将在生产环境中部署的更新和变更。持续交付可以确保:即使开发人员持续进行频繁的修改,其代码也能始终处于可部署的状态。
持续部署(CD) – 类似于持续交付,持续部署就是通过使用各种容器类技术工具(如:Docker和Kubernetes),自动化地将新的、或修改好的代码发布到生产环境中。在此阶段中,维护不同部署环节中代码的一致性,显得尤为关键。
持续监控 – 此阶段涉及到对操作代码、以及支持代码的基础架构进行持续的监控。同时,我们也需要对生产环境中与应用部署相关的变更进行持续监控,以确保应用的稳定性,并具有最佳的性能。
DevOps的优势
企业实施DevOps,能够获得如下主要优势:
更好、更快地交付产品。
更高级的自动化与可扩展能力。
更清晰的系统性结果。
稳定的操作环境。
更好地利用资源。
尽管DevOps的概念已经存在了十年之久,但是与其他方法类似,它在落地的过程中同样有一些值得我们注意和避开的坑点。总的说来,其特点包括:
a)成本问题
DevOps的实施虽然可以减少项目失败的可能,以及回滚的次数,进而在长远的维度上降低IT的总体成本。但是,如果没有在实施DevOps之前做好适当的规划与预算,那么您在转型的实践中可能会让成本陷入无底洞。
b)技能不足
要想成功地采用DevOps,企业往往需要聘请合格的DevOps专业人员。这些DevOps顾问往往能够熟练地管理团队,并建立协作的文化氛围。
c)复杂的基础架构
基础架构的复杂性是成功实施DevOps的另一挑战。企业会逐渐发现那些在孤立环境中部署出的不同服务,很难被集成到通用的基础架构中,进而创建新的应用程序。企业需要对DevOps团队进行培训,以了解组织转型的目标,以及计划实施的路线,并由资深DevOps顾问来管理好复杂的基础架构转换。
DevOps实施–分步指南
1.建立一支胜任的DevOps团队
通常,在迁移到任何新的技术之前,我们首先需要正确地识别资源,并组建一支足以胜任IT项目各项挑战的团队。那么DevOps团队成员的基本素质就应当包括:找到问题根源的批判性思维,熟练使用最新DevOps工具和热衷于学习此类新工具的能力,以及能够进行故障排除和实验性解决问题的能力等。只有组建一支胜任的团队,企业才能够按需整理需求,计划实施路径,部署软件,并最终实现完美的软件交付。
2.制定可靠的DevOps策略
基于如下六个方面的参数,实施DevOps策略:
快速执行 - 任何组织计划的最终目标都是为了:在不断创新的基础上,实现更快速度的执行,以提高客户的满意度。那么,DevOps实践环节中的持续部署,就能够确保交付的准确性和速度。
可扩展性 – 基础架构即代码(Infrastructure-as-code,https://dzone.com/articles/why-use-infrastructure-as-code-and-how-to-be-succe)的实践能够协助在软件产品生命周期的各个阶段(包括开发、测试和产品交付),进行可扩展式的精确管理。这对于DevOps的成功实施是至关重要的。
可靠性 – DevOps的持续集成、持续测试和持续交付等实践,能够通过确保安全和高质量的输出,来提供良好的最终用户体验,以及操作上的可靠性。
协作 – 通过有效的跨团队协作和沟通,DevOps能够消除低效的流程、有限的管理时间、以及项目失败的可能。
频繁交付 – DevOps的持续交付、集成和部署实践,可以实现快速的交付周期,缩短实施过程中必要的恢复时间,从而进一步为创新留出更多的时间。
安全性 – 各种自动化的合规性策略、以及配置管理技术,使得DevOps模型可以通过基础架构即代码和策略即代码(policy as code)的实践,来获得更大的安全性。
3.从小处做起
我们可以从小规模的项目开始,然后逐步转移到全方位的DevOps上。通过小规模的变更,我们可以检验对于测试和部署的管理效果。在此基础上,我们根据其效果,再决定下一步是否实施组织级别的DevOps。
4.尽可能地自动化
DevOps的基础源于快速执行的能力。通过精心选择自动化的工具,我们可以避免重复性的手动交付,实现更快速的流程执行,进而节省项目参与者的时间、精力和整体预算。
5.准备合适的环境
准备合适的持续测试与交付环境,对于DevOps的成功实施同样至关重要。哪怕是对于应用程序的细微修改,我们也应该准备一个稳定的测试与交付环境,以确保根据自动化的测试结果,是否将更改或添加后的代码快速地部署到生产环境中。
6.选择合适的工具并构建强大的通用性基础架构
在DevOps的实施过程中,同样关键步骤是:基于自身特有IT环境的兼容性,选择合适的工具,以实现平稳的集成。通过合适的工具集,您可以使用自定义的工作流、以及访问控制,来构建出强大的基础架构和流畅的功能集。
DevOps工具链
目前,业界有许多DevOps工具,可以帮助用户简化和自动化软件的交付管道,以及工作流程的不同阶段,并最终确保有效的实施。按照如下的生命周期划分方式,我们在此罗列出每一个阶段的DevOps专有工具,供您参考、测试与选择。
计划:这是定义业务价值和需求的重要阶段。
· 编码:涉及到软件的设计,以及代码创建的详细过程。
· 构建:此阶段主要是在自动化工具的帮助下,管理各种软件的构建和版本。因此自动化的工具将协助编译和打包代码,以供将来发布到生产环境中。
· 测试:这是确保代码质量的持续测试阶段。
· 部署:这是管理、计划、协调、以及将各种产品自动发布到生产环境中的阶段。
· 监视:该阶段主要是在生产环境中识别和收集已发布的软件相关问题与信息。
目前,由于没有哪一种工具可以包括所有的开发和交付阶段,因此我们需要在了解自身流程的基础上,通过不同的工具来为企业建立合适的DevOps文化。下面我们来一起讨论那些适合于软件开发不同阶段的12种DevOps工具:
1. Jenkins
Jenkins是在软件开发领域广为采用的一种非常出色的DevOps自动化工具。从本质上说,它是一款开源的CI/CD服务器,可以在交付流程的不同阶段实现自动化。凭借着其庞大的插件生态系统(超过1000个),Jenkins可以与包括Puppet、Docker和Chef在内的多种DevOps工具相集成。
Jenkins的特点:
2. Git
Git是一种分布式源代码管理类(SCM,source code management)DevOps工具,目前正在被广泛地应用于软件开发行业。它既可以使用户轻松地跟踪开发工作的进度,又可以根据已保存的、不同版本的源代码,按需恢复到某一个特定的版本。
Git的特点:
作为一款免费的开源工具,它支持签入、合并、标签、提交、分支等多种版本控制类型的操作。
提供诸如Github或Bitbucket的托管库,可供最多五名团队成员免费、且无限地使用。
易于学习,可以通过Git将分支源代码轻松地合并到一起。
3. Nagios
Nagios是最受欢迎的免费开源DevOps监视工具之一,它能够通过实时地监控基础架构,来轻松地识别各种安全威胁,检测不同的中断与错误。另外,Nagios也能够提供图形化的报告。
Nagios的特点:
4. Splunk
通过向DevOps团队提供智能化的操作,Splunk能够获取各类实用的机器数据,进而提高公司的生产力、竞争力和安全性。
Splunk的特点:
5. Docker
作为在DevOps领域使用最为广泛的容器化开发工具,Docker为云服务原生的、和那些遗留的应用,提供了独立于平台的集成化容器。它能够在确保安全性的基础上,实现敏捷式的操作。
Docker的特点:
能够轻松地实现应用程序的自动化部署,并能够简化分布式的开发。
Google Cloud和AWS均能够提供对Docker的内置支持。
Docker容器不但能够支持虚拟机的环境,并且与平台无关。
6. Kubernetes
Kubernetes是大型团队常用的一款DevOps工具。它能够基于Docker的容器化,来实现构建,并能够通过逻辑分类对容器进行分组。
Kubernetes的特点:
可以通过自动分发,来部署多台计算机。
是第一款容器编排类工具。
在简化大型团队所开发的复杂项目时非常实用。
7. Ansible
由YAML编写的Ansible,是一款针对无代理设计的管理和组织工具。DevOps团队可以使用它来更加轻松地扩展自动化的流程,并提高生产率。
Ansible的特点:
基于主从的架构。
其编排模块被设计为Playbook。
非常适合管理复杂的部署,并能够加快开发的过程。
8. Vagrant
作为一款流行的DevOps工具,Vagrant可以与其他管理类工具结合使用,以实现在同一工作流程中创建虚拟机的环境。如今,许多组织都开始使用Vagrant,来实现向DevOps文化的转换。
Vagrant的特点:
9. Gradle
Gradle是一款功能极为丰富的DevOps工具。其用户可以使用C ++、Java和Python等语言来编写代码。各大流行的IDE(如:Netbeans、Eclipse和IntelliJ IDEA)都能够支持它。
Gradle的特点:
10. Chef
Chef是一款比较流行的、基于Ruby的编排管理工具。它主要被用于检查配置,以及自动化基础架构。
Chef的特点:
有助于实现持续标准化,并能加强配置。
通过自动化整个过程,以确保系统配置的正确性。
能够确保配置策略的灵活性、可读性和可测试性。
11. Worksoft
作为另一种流行的DevOps工具,Worksoft可以为Web和云端应用程序提供各种支持。它具有一套完备的生态系统,适用于那些横跨整个持续交付流程的各类企业级应用。
Worksoft的特点:
能够将UI和端到端的测试,集成到CI的管道中,进而加速整个流程。
允许大中型企业创建基于风险的持续测试管道。这些管道可以被导入应用程序的生产环境,以实现可扩展性。
提供与各种第三方解决方案的集成,以方便用户选择适合自身需求的工具,并在整个DevOps的发布周期中无缝地管理各项任务。
12. Puppet
Puppet是一款可用于部署、配置和管理服务器的开源工具。
Puppet的特点:
由Technavio进行的最新研究(https://www.technavio.com/report/global-it-spending-region-and-industry-devops-platform-market)显示:从2016年到2020年,全球DevOps市场的复合年增长率(CAGR,Compound Annual Growth Rate)已高达19%。这足以突显全球各类企业对于实施DevOps的热情。为了确保DevOps流程的成功实施,我们必须制定可靠的DevOps策略,并选择与现有开发环境相匹配的DevOps工具。而面对当前市场上林林总总的DevOps工具,我们逐一进行配置、测试、以及试验显然是相当耗费时间的。希望您能够将上述所列举的12种DevOps工具收入自己的工具谱中,以便按需进行选用。
CIO之家 www.ciozj.com 公众号:imciow