概念

从字面上来看,“DevOps”一词是由英文 Development(开发)和 Operations (运维)组合而成,但它所代表的理念和实践要比这广阔的多。DevOps 涵盖了安全、协作方式、数据分析等许多方面。

但它是什么呢?

DevOps 强调通过一系列手段来实现既快又稳的工作流程,使每个想法(比如一个新的软件功能,一个功能增强请求或者一个 bug 修复)在从开发到生产环境部署的整个流程中,都能不断地为用户带来价值。这种方式需要开发团队和运维团队密切交流、高效协作并且彼此体谅。

此外,DevOps 还要能够方便扩展,灵活部署。有了 DevOps,需求最迫切的工作就能通过自助服务和自动化得到解决;通常在标准开发环境编写代码的开发人员也可与 IT 运维人员紧密合作,加速软件的构建、测试和发布,同时保障开发成果的稳定可靠。

当然,这意味着更改代码会更频繁,基础架构的使用也会更灵活。所以传统的管理策略无法满足这种需求。您也需要应势而变,赢得先机。

DevOps是敏捷研发中持续构建(Continuous Build,CB)、持续集成(Continuous Integration,CI)、持续交付(Continuous Delivery,CD)的自然延伸,从研发周期向右扩展到部署、运维,不仅打通研发的“需求、开发与测试”各个环节,还打通“研发”与“运维”。DevOps 适合“软件即服务(SaaS)”或“平台即服务(PaaS)”这样的应用领域,其显著的特征就是:

  • 打通用户、PMO、需求、设计、开发(Dev)、测试、运维(Ops)等各上下游部门或不同角色
  • 打通业务、架构、代码、测试、部署、监控、安全、性能等各领域工具链。

发展历程

【2009】 DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营和QA部门之间的沟通、协作与整合;

【2011】快速响应业务和客户的需求,通过行为科学改善IT各部门之间的沟通, 以加快IT组织交付满足快速生产软件产品和服务的目

【2015】DevOps强调沟通、协作、集成、自动化和度量,以帮助组织快速开发软件产品,并提高操作性能和质量保证;强调自动化软件交付和基础设施变更的过程,以建立一种文化和环境,通过构建、测试和发布软件等方法,可以快速、频繁地、更可靠地发布软件。

【2016】 DevOps的目标是建立流水线式的准时制(JIT)的业务流程,以获得最大化业务成果,例如增加销售和利润率,提高业务速度、减少运营成本。

【2017】一个软件工程实践,旨在统一软件开发(Dev)和软件操作(Ops),与业务目标紧密结合,在软件构建、集成、测试、发布到部署和基础设施管理中大力提倡自动化和监控。DevOps的目标是缩短开发周期,增加部署频率,更可靠的发布。

工具清单

工具链:规划、问题跟踪、源代码管理、构建、测试代码、持续集成和部署、管理配置、监控和记录、交流、知识共享

规划

规划在DevOps中的重要性体现在如下三个方面:

  1. 设定共同的目标
  2. 提高透明度
  3. 提前赋权

    可用于规划的工具包括:
  • GitLab

    GitLab是基于Web的DevOps生命周期工具。它提供了基于Git存储库的管理器。通过由GitLab开发的开源许可证,它可以提供Wiki、问题跟踪、以及CI/CD管道等功能。用户可以通过它自带的工具进行实际规划,或是查看工作范围。

  • Tasktop

    Tasktop允许将各种现有工具添加到,由Tasktop所支持的应用生命周期管理(ALM)、PPM和ITSM工具中,从而在整个生命周期中实现可视化和敏捷性。

  • CollabNet’s VersionOne

    VersionOne支持Scrum、Kanban、XP、SAFe、以及混合开发方法。它能够轻松地实现横跨所有团队、流程、软件产品组合、以及企业计划的跟踪和报告。

  • Pivotal Tracker

    可方便身处各地的开发人员通过敏捷的项目管理工具,实现共享待办事项的优先级,以及开展实时的协作。

  • Trello

    Trello是一种基于Web的Kanban风格的列表制作(list-making)应用。许多团队在计划单个工作冲刺(sprints)时都会用到它。

  • Azure Boards

    Azure Boards可使用包括Scrum板、Kanban板、以及仪表板在内的敏捷工具,来跟踪软件项目,并使用敏捷方法进行更好的规划。用户可以使用Azure Boards来实现可视化工作,共享计划,跟踪进度,以及确保方法的正确性。

问题跟踪

问题跟踪在DevOps中的重要性体现在如下三个方面:

客户的响应能力突破有限的知识线索提供反馈回路可用于问题跟踪的工具包括:

Atlassian’s Jira

Jira是由Atlassian开发的问题跟踪专用产品,可被用于错误跟踪和敏捷项目管理等场景中。

JetBrains’s YouTrack

YouTrack是由JetBrains开发的、基于商业浏览器的、专用错误与问题跟踪系统。同时,它也是一款项目管理软件。YouTrack通过自动化完成,问题批量处理,自定义问题属性集与工作流等功能,来实现基于查询的问题搜索。

Zendesk

Zendesk使您可以轻松地从多个渠道跟踪每一个客户问题。像Uber和Airbnb之类的公司,都在使用Zendesk作为他们的问题跟踪软件。

源代码控制

源代码控制的重要性体现在如下三个方面:

管控资产避免无效的代码上传给团队赋能可用于源代码控制的工具包括:

Git

作为分布式版本控制系统,Git可被用于在软件开发的过程中,跟踪源代码的更改。为协调程序员之间的工作而设计的Git,能够跟踪文件的更改,数据的完整性,以及对分布式非线性工作流提供支持。

GitHub

GitHub通过自带的各项功能,提供了针对Git的分布式版本控制和源代码管理。

GitLab

GitLab可实现对源代码的版本管理,帮助开发团队共享、协作、并提高生产力。

Bitbucket

由Atlassian带来的、基于Web的Bitbucket,是一种版本控制库类型的托管服务。它可以被用于Mercurial或Git之类版本控制系统的源代码和开发项目场景中。

Subversion

持有Apache开源许可的Subversion是一个软件版本控制系统。软件开发人员可以使用Subversion,来维护源代码、网页、以及文档的当前版本和历史版本。

构建工具

构建工具在DevOps中的重要性体现在如下三个方面:

封装一致性自动执行各种易错的活动初步判断质量水平可用于构建的工具包括:

Maven/Gradle

Maven是主要被用于Java项目构建的自动化工具,当然它也可以被用于构建和管理用C#、Ruby、Scala、以及其他语言编写的项目。

Gradle是一个开源的自动化构建系统。它基于Apache Ant和Apache Maven的概念,引入了基于Groovy的域特定(domain-specific)语言,而不像Apache Maven那样使用XML形式,来声明项目的配置。

MSBuild

Microsoft Build Engine(也称MSBuild)是用于代码托管,以及本机C++代码的免费开源构建工具集。同时,它也是.NET Framework的一部分,能够与Visual Studio进行联动。

Rake

Rake是一种软件任务管理与自动化构建工具。用户既可以用它来指派任务、描述依赖关系,又能够在名称空间中的对任务进行分组。

JFrog Artifactory可以针对在存储构建过程的二进制输出,进行分发和部署。Artifactory提供了对于Maven、Debian、npm、Helm、Ruby、Python和Docker等多种软件包格式的支持。而JFrog具有可用性、可复制性、灾难恢复能力、可扩展性,以及能与许多本地和云端存储产品协同使用。

Sonatype Nexus

Sonatype Nexus是一种资源库管理器。您可以用它来代理,收集和管理各种依赖项,而不必频繁地处理各种JAR的集合。开发者可以使用它来配置内部版本,将工件(artifacts)发布到Nexus上,以实现软件的轻松分发。

NuGet

NuGet是一种.NET的软件包管理器。其客户端工具提供了生成和使用软件包的功能。软件包的作者和使用者可以使用NuGet Gallery作为软件包的集中存储库。

测试代码

测试代码在DevOps中的重要性体现在如下两个方面:

专注于软件的内部质量建立部署artifacts可用于测试代码的工具包括:

JUnit

JUnit是Java语言的单元测试框架。Junit源自在SUnit,是测试驱动式(test-driven)开发的必备工具。

xUnit.net

开源的xUnit.net是由NUnit的原始作者所编写出的、基于.NET Framework的、单元测试工具。

Selenium

Selenium是用于测试Web应用程序的一种可移植框架。通过回放工具,测试人员可以用Selenium来编写各种功能性测试,而无需特意学习某种测试脚本语言。

Jasmine

Jasmine是一种开源的JavaScript测试框架。凭借着易读的语法,它可以在任何支持JavaScript的平台上运行,而不限于应用程序或IDE。您可以在该平台上运行诸如:Screw.Unit、JSSpec、JSpec、以及RSpec等单元测试框架。

Cucumber

Cucumber是一种支持行为驱动开发(behavior-driven development)的软件工具。它通过普通语言(ordinary-language)解析器—Gherkin,让用户使用易于理解的逻辑语言,来指定预期的软件行为。

持续集成(CI)

CI在DevOps中的重要性体现在如下两个方面:

提供快速反馈减少缺陷和等待可用于CI的工具包括:

Jenkins

Jenkins是一种免费开源的自动化服务器,可以在servlet容器(如Apache Tomcat)中运行。Jenkins通过CI与CD的相关技术,实现了软件开发过程中的自动化。

CircleCI

CircleCI既可谓世界上最大的分享类CI/CD平台,又是代码从构想到交付的中央hub。作为最常用的DevOps工具之一,CircleCI每天可处理超过100万个构建数据。您可以通过它来获悉工程团队是如何工作,代码是如何运行的。像Spotify、Coinbase、Stitch Fix和BuzzFeed之类的公司,都使用CircleCI来提高工程团队的生产力,发布更好的产品,并加快发布速度。

Travis CI

Travis CI是一项托管式的CI服务,可用于构建和测试GitHub上托管的软件项目。Travis CI为私人项目既能提供各种付费计划,又有开源的免费计划。此外,TravisPro还能够为用户的硬件,提供用于自定义部署的专有版本。

Concourse

Concourse是由Go编写的自动化系统。在CI/CD中,用户可以通过Concourse构建出由简到繁的、可任意扩展的自动化管道。

AWS CodePipeline

AWS CodePipeline是一项完全托管式的CD服务,可以帮助您自动化发布管道,以实现快速、可靠的应用程序和基础架构的更新。

在更改代码时,CodePipeline能够根据用户定义的发布模型,自动化地执行构建、测试、部署、以及发布阶段,以便用户快速、可靠地交付出各项新功能和更新。

您也可以轻松地将AWS CodePipeline与第三方服务(例如GitHub)、或自定义的插件相集成。此外,您只支付AWS CodePipeline的使用费用,而无需任何前期或长期的套餐费用。

Azure Pipelines

Azure Pipelines既可以让用户获取适用于Linux、macOS和Windows的云端托管管道,又能够构建各种Web、桌面和移动应用,以及将它们部署到云端或本地。此外,Pipelines还可以为用户的自动化构建和部署节约更多的时间。

持续部署(CD)

CD在DevOps中的重要性体现在如下三个方面:

优化想生产环境部署的编录自动化复杂的管道统一团队,为客户创造价值可用于CD的工具包括:

Spinnaker

最初由Netflix开发的Spinnaker是一个多云的、免费开源CD软件平台。用户可以利用其强大且灵活的管道管理功能,以及与主流云提供商的集成服务,更快、更稳健地发布针对软件产品的更改。

Octopus Deploy

Octopus Deploy是全球领先的自动化部署与发布管理工具。作为一个工具集,Octopus可以极大地简化DevOps流程,以便用户通过云服务或虚拟机,持续测试与部署各种微服务或应用。

AWS CodeDeploy

AWS CodeDeploy是一项完全托管式的部署服务。它可以自动将软件部署到Amazon EC2、AWS Fargate、AWS Lambda、以及本地服务器上,而无需手动操作。

配置管理工具

配置管理在DevOps中的重要性体现在如下两个方面:

加强一致性将基础架构作为代码可用于配置管理的工具包括:

Terraform

Terraform是由HashiCorp创建的开源式基础架构即代码(infrastructure-as-code,IaC)软件工具。通过使用Hashicorp配置语言、或JSON高级配置语言,用户可以用它来定义和配置数据中心的基础结构。

BOSH

BOSH是一个对不同类型云服务软件进行工程发布、部署和生命周期统一管理的项目。它既可以在数百个虚拟机(VM)上进行软件配置和部署,又能够以最小的停机时间实现故障恢复和软件更新。

BOSH支持多种基础架构即服务(IaaS)提供商,其中包括:VMware vSphere、Google Cloud Platform、Amazon Web Services EC2、Microsoft Azure、OpenStack和阿里云。此外,BOSH还提供了一种云服务商接口(Cloud Provider Interface,CPI),可方便用户通过扩展BOSH,来支持诸如Apache CloudStack和VirtualBox等IaaS应用。

Chef

作为一种配置管理工具,Chef能够处置物理服务器、虚拟机和云端主机的各种设置。像Facebook、Etsy、Cheezburger和Indiegogo之类的公司,都在使用Chef软件来控制和管理其基础架构。此外,作为DevOps运动的创始者,Chef不断践行着数字化转型、持续自动化、以及快速交付。

Ansible

Ansible是一种开源的软件采购、配置管理和应用部署的工具。它可以被配置在各种Unix发行版、以及Windows上。Ansible可以通过自带的描述性语言,来定义系统的相关配置。

Puppet

Puppet提供了一种定义系统所需的软件配置,并具有保持指定状态的能力。您可以使用类似于Ruby的声明性域特定语言(declarative domain-specific language,DSL),来定义特定环境或架构的配置参数。Puppet使用自带的Facter程序来发现系统信息。它通过使用清单(manifests),来管理其控制的所有节点上的重要配置信息。其主控节点是那些已安装了Puppet,并运行着Puppet代理(即守护程序)的节点。代理收集到相关节点的配置信息后,会发送给Puppet主服务器。然后,Puppet的主节点会据此来进行编录,以便让每个节点都能更新配置,并保持一致。

此外,Puppet主要是通过拉取的模式(pull mode),定期轮询主服务器,来检索特定站点和节点的配置。在该结构中,受管理的节点运行着作为后台服务的Puppet代理应用。

Google Cloud Deployment Manager

作为一项基础架构的管理服务,Google Cloud Deployment Manager可以轻松地创建、部署和管理Google云平台的相关资源。

监控和记录工具

监控和记录在DevOps中的重要性体现在如下四个方面:

快速恢复反应能力透明度事故期间人员参与度可用于配置管理的工具包括:

ELK Stack

ELK Stack是Elasticsearch、Logstash和Kibana三个开源产品的集合。它们都是由Elastic公司开发、管理和维护的。

E代表ElasticSearch – 可用于存储日志L代表Logstash – 可用于传输、处理和存储日志K代表Kibana – 能够提供Web界面的可视化工具Datadog

Datadog是针对云规模(cloud-scale)应用的监控服务。它可以通过基于SaaS的数据分析平台,来监控服务器、数据库、以及各项工具与服务。

Datadog应用性能监控(Application Performance Monitoring,APM)可以对日志和基础架构进行监控。通过监控诸如:请求量和延迟之类的关键指标,以及跟踪详细的单个请求,Datadog能够自动生成针对应用的仪表板。

当有请求被发往到某个应用时,Datadog会通过查看和跟踪整个分布式系统的状态,以显示与该请求相关的系统数据。

New Relic

New Relic是一家位于加州旧金山的技术公司。它致力于开发基于云服务的软件,以帮助网站和应用所有者跟踪其服务性能。

New Relic的应用性能监控(APM)产品,可以提供有关Web应用的性能,以及最终用户满意度的实时趋势数据。

Prometheus

Prometheus是用于事件监控和警报的免费软件应用。它将受监控指标的实时数据,记录在一个时序数据库中。该数据库构建在具有灵活查询和实时警报功能的HTTP拉取式模型上。也就是说:Prometheus服务器事先配置各个受监控节点的指标,然后定期收集相关数据,并将其存储在本地。

Zipkin

Zipkin是一个分布式跟踪系统。它能够为用户按需查找与收集时序数据,并协助解决服务架构中的延迟问题。

如果日志文件中已有跟踪ID,那么它会直接跳转至该ID处。否则,您需要基于服务、操作名称、标签(tagsm)、以及持续时间等属性,进行查询。例如,您可以查询某项请求在服务中花费的时间百分比,以及对应的操作是否成功。

Azure Monitor

Azure Monitor通过提供一个全面的解决方案,从目标云端和本地环境中收集、分析和执行遥测(telemetry),进而最大程度地提高应用与服务的可用性与性能。据此,它可以协助用户主动地识别出相关问题,以及所依赖的资源。您往往可以使用Azure Monitor来达到如下目的:

使用Application Insights,来检测和诊断跨应用与依赖项的问题。将基础架构问题与适用于VM的Azure Monitor、以及适用于容器的Azure Monitor相关联。使用Log Analytics攫取监控数据,以便进行故障排除和深度诊断。通过智能警报和自动化操作,来全面支持运营。可使用Azure仪表板和工作簿(workbooks),来实现可视化。交流工具

交流在DevOps中的重要性体现在如下三个方面:

连接团队减少等待改善协作可用于交流的工具包括:

Slack

Slack是一个专用的即时消息平台。它旨在为用户公司取代电子邮件,这种传统的信息交流与共享方法。通过Slack您可以按照不同的“频道”,进行组织交流或小组讨论。当然,你也可以私密的方式进行信息和文件的共享操作。

Microsoft Teams

Microsoft Teams是一个统一化的通信和协作平台。它集成了实时聊天、视频会议、文件存储、以及协作应用等功能。

作为基于聊天场景的协作工具,Teams可为全球、远程和分散的团队,提供了共享信息的能力。此外,它还带有诸如:文档协作、一对一聊天、团队交流等酷炫的功能。

Google Hangouts

Google Hangouts是Google开发的一种通讯软件。组织内的成员可以用它来有效地向一到多个同事发送消息,与多人持续进行对话,并使用机器人(bots)来自动化各项工作。此外,您可以在电脑的浏览器,以及Android和iOS的移动应用中使用它。

Zoom

Zoom Video Communications提供了视频会议、在线会议、聊天和移动协作等远程服务。同时,它是那些需要经常开展视频培训团队的首选。

知识共享工具

知识共享在DevOps中的重要性体现在如下三个方面:

减少认知上的不对称提高新员工的生产力避免已知错误的重现可用于知识共享的工具包括:

GitHub Pages

GitHub Pages是一种静态站点的托管服务。它既可以直接从GitHub的存储库中,获取HTML、CSS和JavaScript文件,又能够在构建过程中将这些文件发布到网站上。此外,GitHub Pages提供了各种网站的示例,可供用户参考。

Confluence

Confluence是由Atlassian用Java编程语言编写、开发并发布的一款协作软件。作为一款协作类Wiki工具,Confluence可以帮助团队有效地进行协作和知识共享。例如,您可以在“团队日历(Team Calendars)”插件的帮助下,捕获项目需求,向特定用户分配任务,以及一次性管理多个日历。

Jekyll

Jekyll是由GitHub的联合创始人Tom Preston-Werner用Ruby编写而成,并根据开源的MIT许可进行发行。它是一个简单的、博客感知(blog-aware)的静态站点生成器。也就是说,作为一个解析引擎,它能够从诸如:模板、部分代码、以及液态代码(liquid code)等动态组件中,构建出静态网站。

Google Sites

Google Sites是由Google提供的结构化Wiki与网页创建类工具。它的目标是让任何人在无需学习设计与编程的前提下,能够创建出方便与他人协作的,简单且高质量的网站。而且此类网站可以在台式机、智能手机等不同的屏幕上被轻松地访问到。

代码管理(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

版本控制&协作开发:GitHub、GitLab、BitBucket、SubVersion、Coding、Bazaar

自动化构建和测试:Apache Ant、Maven 、Selenium、PyUnit、QUnit、JMeter、Gradle、PHPUnit、Nexus

持续集成&交付:Jenkins、Capistrano、BuildBot、Fabric、Tinderbox、Travis CI、flow.ci Continuum、LuntBuild、CruiseControl、Integrity、Gump、Go

容器平台: Docker、Rocket、Ubuntu(LXC)、第三方厂商如(AWS/阿里云)

配置管理:Chef、Puppet、CFengine、Bash、Rudder、Powershell、RunDeck、Saltstack、Ansible

微服务平台:OpenShift、Cloud Foundry、Kubernetes、Mesosphere

服务开通:Puppet、Docker Swarm、Vagrant、Powershell、OpenStack Heat

日志管理:Logstash、CollectD、StatsD

监控,警告&分析:Nagios、Ganglia、Sensu、zabbix、ICINGA、Graphite、Kibana

最新文章

  1. ConcurrentAsyncQueue 2014-09-07
  2. ypzl药品质量不合格数据库-excel自动排版
  3. BZOJ4247挂饰
  4. 在linux中连接wifi
  5. Loadrunner 关联 web_custom_request综合实例
  6. 十四、Struts2的国际化
  7. android UI进阶之实现listview的分页加载
  8. leetcode5 Implement strstr() 实现strstr函数功能
  9. ASP.NET页面生命周期总结(2)
  10. 判断当前设备是移动端或者PC端
  11. Abp中使用可视化的日志面板
  12. 微信小程序 canvas导出图片模糊
  13. Ubuntu 下使用 Nginx 部署 .NET Core 2.0 网站
  14. 使用spring:aop中修改增强方法中的参数
  15. java jdk jre
  16. 视频播放flv player的使用
  17. cc攻击和ddos攻击的区别和攻防 + 调SYN连接参数
  18. Swift: 用UserDefaults保存复杂对象
  19. k8s+Jenkins+GitLab-自动化部署asp.net core项目
  20. UVA10054_The Necklace

热门文章

  1. LeetCode543.二叉树的直径
  2. oracle字符集与乱码(转)
  3. 牛逼!MySQL 8.0 中的索引可以隐藏了…
  4. Jmeter5.1.1 把默认语言调整为中文
  5. 整合阿里云OSS
  6. PHP 框架之一Laravel
  7. 【汇编实践】go assembly
  8. 小鹏汽车技术中台实践 :微服务篇 InfoQ 今天 以下文章来源于InfoQ Pro
  9. 原生js使用面向对象的方法开发选项卡实例教程
  10. Maven环境搭建以及在IDEA中的配置与简单入门