【51CTO.com快译】
众所周知,DevOps的目标是分阶段推进软件的开发进程,通过持续迭代与改进,进而敏捷地交付客户满意的软件产品。那么常言道:“工欲善其事,必先利其器。”好的工具对于项目团队来说,可以起到如虎添翼的效果。本文将向您介绍DevOps的整个工具链,其中包括:规划、问题跟踪、源代码管理、构建、测试代码、持续集成和部署、管理配置、监控和记录、交流、以及知识共享。
规划
规划在DevOps中的重要性体现在如下三个方面:
- 设定共同的目标
- 提高透明度
- 提前赋权
可用于规划的工具包括:
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
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与网页创建类工具。它的目标是让任何人在无需学习设计与编程的前提下,能够创建出方便与他人协作的,简单且高质量的网站。而且此类网站可以在台式机、智能手机等不同的屏幕上被轻松地访问到。
总结
DevOps是一种令人兴奋的工作方式。就目前而言,它能够让团队成员在保证持续交付的同时,充分专注客户的需求和产品的质量,进而让软件公司在技术水平上能够脱颖而出。希望上述介绍的不同DevOps工具类别,能够对您的DevOps实践提供帮助。
【原标题】The DevOps Toolchain ,作者: Suresh Sekar
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】