概念
DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。
1 、软件开发的演变
多年来,DevOps从现有的软件开发策略/方法发展而来,以响应业务需求。让我们简要地看一下这些模型是如何演变的,以及它们最适合的场景。
缓慢而繁琐的瀑布模型演变成敏捷,开发团队在短时间内完成软件开发,持续时间甚至不超过两周。如此短的发布周期帮助开发团队处理客户反馈,并将其与bug修复一起合并到下一个版本中。
虽然这种敏捷的SCRUM方法为开发带来了敏捷性,但它在运维方面却失去了敏捷实践的速度。开发人员和运维工程师之间缺乏协作仍然会减慢开发过程和发布。
DevOps方法就是基于对更好的协作和更快的交付的需求而产生的。DevOps允许用较少复杂问题的持续软件交付来修复和更快地解决问题。
现在我们已经了解了DevOps的发展,让我们来详细看看DevOps是什么。
2 、什么是DevOps?
DevOps是一种软件开发方法,涉及软件在整个开发生命周期中的持续开发,持续测试,持续集成,持续部署和持续监控。 这些活动只能在DevOps中实现,而不是敏捷或瀑布,这就是为什么顶级互联网公司选择DevOps作为其业务目标的前进方向。 DevOps是在较短的开发周期内开发高质量软件的首选方法,可以提高客户满意度。
在不了解DevOps生命周期的情况下,对DevOps的理解也会片面化。现在让我们看看DevOps生命周期,并探讨它们如何与下图所示的软件开发阶段相关联。
持续开发:
这是DevOps生命周期中软件不断开发的阶段。与瀑布模型不同的是,软件可交付成果被分解为短开发周期的多个任务节点,在很短的时间内开发并交付。
这个阶段包括编码和构建阶段,并使用Git和SVN等工具来维护不同版本的代码,以及Ant、Maven、Gradle等工具来构建/打包代码到可执行文件中,这些文件可以转发给自动化测试系统进行测试。
持续测试:
在这个阶段,开发的软件将被持续地测试bug。对于持续测试,使用自动化测试工具,如Selenium、TestNG、JUnit等。这些工具允许质量管理系统完全并行地测试多个代码库,以确保功能中没有缺陷。在这个阶段,使用Docker容器实时模拟“测试环境”也是首选。一旦代码测试通过,它就会不断地与现有代码集成。
持续集成:
这是支持新功能的代码与现有代码集成的阶段。由于软件在不断地开发,更新后的代码需要不断地集成,并顺利地与系统集成,以反映对最终用户的需求更改。更改后的代码,还应该确保运行时环境中没有错误,允许我们测试更改并检查它如何与其他更改发生反应。
Jenkins是一个非常流行的用于持续集成的工具。使用Jenkins,可以从git存储库提取最新的代码修订,并生成一个构建,最终可以部署到测试或生产服务器。可以将其设置为在git存储库中发生更改时自动触发新构建,也可以在单击按钮时手动触发。
持续部署:
它是将代码部署到生产环境的阶段。 在这里,我们确保在所有服务器上正确部署代码。 如果添加了任何功能或引入了新功能,那么应该准备好迎接更多的网站流量。 因此,系统运维人员还有责任扩展服务器以容纳更多用户。
由于新代码是连续部署的,因此配置管理工具可以快速,频繁地执行任务。 Puppet,Chef,SaltStack和Ansible是这个阶段使用的一些流行工具。
容器化工具在部署阶段也发挥着重要作用。 Docker和Vagrant是流行的工具,有助于在开发,测试,登台和生产环境中实现一致性。 除此之外,它们还有助于轻松扩展和缩小实例。
持续监控:
这是DevOps生命周期中非常关键的阶段,旨在通过监控软件的性能来提高软件的质量。这种做法涉及运营团队的参与,他们将监视用户活动中的错误/系统的任何不正当行为。这也可以通过使用专用监控工具来实现,该工具将持续监控应用程序性能并突出问题。
使用的一些流行工具是Splunk,ELK Stack,Nagios,NewRelic和Sensu。这些工具可帮助密切监视应用程序和服务器,以主动检查系统的运行状况。它们还可以提高生产率并提高系统的可靠性,从而降低IT支持成本。发现的任何重大问题都可以向开发团队报告,以便可以在持续开发阶段进行修复。
这些DevOps阶段连续循环进行,直到达到所需的产品质量。下面的图表将显示可以在DevOps生命周期的哪个阶段使用哪些工具。
DevOps的目的是更快速,更可靠地创建质量更好的软件,同时开发,运维团队之间进行更多的沟通和协作。 它是一个自动化过程,允许快速,安全和高质量的软件开发和发布,同时保持所有利益相关者在一个循环中。 这就是DevOps获得越来越多的大型互联网公司青睐的真正原因。
3、实现DevOps需要什么?
硬性要求:工具上的准备
上文提到了工具链的打通,那么工具自然就需要做好准备。现将工具类型及对应的不完全列举整理如下:
代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
构建工具:Ant、Gradle、maven
自动部署:Capistrano、CodeDeploy
持续集成(CI):Bamboo、Hudson、Jenkins
配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
容器:Docker、LXC、第三方厂商如AWS
编排:Kubernetes、Core、Apache Mesos、DC/OS
服务注册与发现:Zookeeper、etcd、Consul
脚本语言:python、ruby、shell
日志管理:ELK、Logentries
系统监控:Datadog、Graphite、Icinga、Nagios
性能监控:AppDynamics、New Relic、Splunk
压力测试:JMeter、Blaze Meter、loader.io
预警:PagerDuty、pingdom、厂商自带如AWS SNS
HTTP加速器:Varnish
消息总线:ActiveMQ、SQS
应用服务器:Tomcat、JBoss
Web服务器:Apache、Nginx、IIS
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker
在工具的选择上,需要结合公司业务需求和技术团队情况而定。