DevOps服务:更好地规划、协作和快速交付

版权声明:本文为博主原创文章,未经博主允许不得转载。PS: 转载请注明出处 http://blog.csdn.net/ouyangtianhan https://blog.csdn.net/ouyangtianhan/article/details/84585935

DevOps
是一个不断进化的框架和哲学,不断推动着如何更好更快的进行应用程序的开发和快速进行新机能的迭代发布,以便快速的响应客户需求和交付客户产品。DevOps实践使得开发Team和IT运维Team能够以一种透明且可见的方式进行持续的沟通,集成,协作。

因此,这种开发团队(Dev)和运维团队(Ops)的紧密关系形成了DevOps生态圈。一个DevOps的生态圈包含着软件开发规划,代码实装,测试和发布等阶段,而各个阶段由开发和运维团队紧密的跟随和持续的监督着。这个生态环中拥有一个持续获取客户改善需求反馈的机制,同时持续开发、测试和部署这些反馈。如此,软件能够拥有持续改善并快速发布新机能(feature)的能力。
在这里插入图片描述
DevOps解决方案专注四个维度方面:DevOps文化、自动化、可度量和分享((CAMS) culture, automation, measurement and sharing)。而方案的具体实施将落实到DevOps的一系列工具。通过这些工具,将开发和运维的流水线化和同步协作变得可能。这意味着你可以将开发、集成、测试和部署中的手动任务自动化。你需要的就是通过合理的DevOps方案考量来满足这些任务。

为何DevOps变得更重要 ?

除了提高开发运维团队间的沟通和协作外,另一个重要的原因是DevOps专注于以提供快速交付的服务或者说功能的形式来完成你的客户的满意度。通过DevOps是可以不断提高生产效率,推动商业创新价值的。
DevOps的运用能够使得业务交付以更好、更快和更安全的方式传递到终端客户。这包括机能的发布和产品的更新。它保证了如何使新技能或者产品快速发布到终端客户而又不以损失质量的风险为代价。使得产品机能在发布前能够获得充分可靠的质量保证。

不同DevOps方法论

在这里插入图片描述
为了更好的开发,提高产品发布速度,有一些DevOps的方法论可以来应用。这些方法论属于软件开发工程的方法论体系,他们中间一些已经非常流行:

  • Scrum:Scrum是一种软件开发方法论,它展示了团队如何互相配合来提高开发速度,提高开发质量。该实践包括设计角色(Scrum Master,product owner),明确功能(Sprint,Daily Scrum,TimeBox,Meeting)和关键工作流。
  • Kanban:软件开发进度可以通过看板的方式来进行追踪。
  • Agile:早期DevOps实践和工具受Agile影响很大。Agile的一些元素在Kanban和Scrum的方法论中也有包含。以用户故事和持续反馈的方式,Agile的实践注重于依赖和需求变更,每日立会,需求建档等。与长周期软件开发方式如Waterfall形式不同,它将开发周期分布的更短。

DevOps 工具链

DevOps工具链的建立使用是DevOps实践的一部分。其最主要的课题是能够缩短、流水线化和自动化软件开发和交付流程的不同阶段。一些好的DevOps方案会同时对开发和运维团队间如何协作,如何自动化集成等作出明确的规约。
在这里插入图片描述
下面将介绍10款软件开发公司推荐的DevOps工具。我们以DevOps生命周期的不同阶段,来归属这些被使用的工具:

  • Plan: 业务价值、观点和需求会在该阶段定义。你可以通过一些工具如Git,Jira等跟踪这些issue观点,来计划和管理项目。
  • Code:该阶段一般是进行创建实装软件代码以及软件设计。一般使用的工具有GitLab,GitHub,Stash或者Bitbucket。
  • Build:该阶段会进行软件编译以及版本话的管理。为了以后发布到生产环境,你可以使用自动化工具来编译和打包代码。通过包仓库或者代码仓库管理发布的成果物。一些使用的工具如Ansible,Docker,Maven,Chef,JFrog Artifactory或者Gradle。
  • Test:为了获得最优的代码质量,该阶段将进行持续测试。一些相关的工具有Codeception,JUnit,BlazeMeter,Vagrant,Selenium和TestNG等。
  • Deploy:该阶段进行成果物的发布管理,部署计划等。使用的工具有Jira, Chef, Kubernetes, Docker, Openstack, Jenkins, OpenShift, Ansible 或者 Puppet。
  • Operate:该阶段关注于将软件部署的生产环境的过程。通常工具有PowerShell, Otter, Puppet, Salt, Ansible 或者 Chef。
  • Monitor: 这个阶段将收集软件发布的相关问题信息。使用的工具有 Grafana, Nagios, New Relic, Slack, Datadog 和 Wireshark。

DevOps 实践

DevOps的实践以持续改善和自动化为目标。大多数的实践专注于特定的开发阶段,比如:

  • 持续开发: 作为DevOps周期的一部分,该部分延展于设计计划和代码实装的阶段。会有一些类似版本控制机制的活动发生。
  • 持续测试: 当应用的代码不断的更新和生成的时候,该阶段将会进行前期规划,自动和持续的代码测试等。在生产时期,这些测试会有助于快速进行代码交付。
  • 持续集成: 该阶段会伴随着其他测试和开发工具的介入,以及管理工具的相关配置等。它将为准备发布的代码质量进行跟踪保证。同时,会介入其他DevOps周期包括开发和测试,快速获得反馈同时查找和解决代码中出现的问题。
  • 持续交付: 该实践阶段,负责发布交付测试和预生产环境自动产生后的代码。最终负责人将决定是否将其成果物/代码作为产品交付。
  • 持续部署: 该阶段会将新的或者更改后的代码自动发布到生产环境。对于公司来讲经常会一天内进行多次代码release或者新技能的变更提交,而自动化的持续部署就更显得尤为重要。借助于Kubernets和Docker等容器技术,使得自动化的持续部署能够随着代码的更新同时发布部署到不同的平台和部署环境上。
  • **持续监控:**该阶段实践持续监控底层基础设施和运维问题。反馈循环机制负责监控和报告问题bug给开发团队。
  • IaC(Infrastructure as code): 这个实践会在DevOps的不同阶段周期发生,从而实现自动化检证发布软件所需的基础设施要求。在现有的开发工具基础上,开发者为基础设施也编写成代码。例如,在Kubernets,Docker和OpenShift技术工具的基础上,存储卷可能由开发者创建。通过IaC,可以跟踪监控配置文件的变更,擦除或者回滚配置。

DevOps的好处

应用DevOps能为最终实现客户满意带来很多技术上,商业上的帮助和利益。列举的常见的应用DevOps的好处有:

  • 更出色的创新
  • 更好更快的产品交付
  • 更出色的自动化工作
  • 更好的资源配置
  • 更好的可用性和扩展性
  • 降低复杂度,更快的解决问题
  • 更稳定的运维环境
  • 更好的可视化的成果系统

DevOps历史

许多的DevOps方法基于精益编程和敏捷开发来实现流水化的开发和运维。但是,不得不讲DevOps是开发者们和运维团队们共同一步一步积累优化出来的。

在2000年初的时候,越来越多的网站例如google和flickr面临无法承载巨大点击量的问题。为了解决该类问题,对于运维出身而又靠谱的有研发能力的工程师的需求日益凸显,他们来和开发团队人员共同协作来保证能够不断更新发布代码到生产环境,同时保证网站能够稳定运行。

2009年,在一次技术峰会中Flickr的工程师Paul Hammond和John Allspaw发表了类似现在DevOps的方法论。同年,Patrick Debois在Belgium组织举办了第一次的【DevOps Day】。随着越来越多的该活动在全世界各地的举办和推广,新的标签 #DevOps正式产生。

为了更好的满足DevOps的目标,随后几年越来越多的开源工具和框架被提出和开发出来。

DevOps解决的问题

在提出DevOps服务前,开发团队需要理解业务,收集需求并最终进行代码实装,之后,软件的测试由QA团队单独在独立的环境中测试软件是否正常工作,然后再交给运维成员去部署。而运维团队又分成子团队,如负责数据库的,负责网络的等等。这种模式产生了如下问题:

  • 运维和QA团队将会对非常多的机能进行相应工作,然而他们可能对其机能的上下文或者业务目的一无所知。
  • 而开发团队呢,他们对运维和QA团队碰到和提出的问题一脸蒙圈,如此导致软件不能按照预期的进行开发交付上线等。
  • 各个团队的独立工作,使得在软件出现问题的时候,互相指责,如此使得各个团队工作效率下降。

面临此类问题,DevOps的应用完全是雪中送碳。应用DevOps方案,你可以解决不同团队协作的问题,问题事件不详细等等问题。通过这种方式,使得责任共担,从而保证软件的预期执行和交付。同时,自动化的问题跟踪和质量反馈收集不仅降低了时间成本,更提高了生产效率和客户满意度。

DevOps的目标

DevOps主要专注于提高改善不同利益体间的协作,从计划到实施交付所有一切都是自动化的流程。它的目标是:

  • 增加部署的频度
  • 减少新发布的失败率
  • 缩短上市时间
  • 减少bug修正时间
  • 更好的进行修复维护

根据最新(2016)的DevOps状态统计报告,“应用DevOps的公司的部署频度增加了30倍,而部署时间缩短了200倍;同时他们的失败率降低了60倍,而恢复速度提高了168倍。”

猜你喜欢

转载自blog.csdn.net/ouyangtianhan/article/details/84585935