【.com快译】在开始下面的讨论之前,我们先通过一张大图来了解一下不同工具在DevOps生命周期中的位置。DevOps生命周期阶段我敢断言,长期从事开发工作的你一定对上图不陌生。那么,这是否意味着你可以在各个阶段自由使用各种工具而不会遇到任何问题呢?本文将引导您完成DevOps生命周期的各个阶段,并向您展示如何组合使用各种工具。用于解决各种现实问题的DevOps工具。一般来说,当我们采用DevOps模型进行软件和应用开发时,通常会经历以下五个不同的阶段:持续开发持续测试持续集成持续部署持续监控1.持续开发这个阶段涉及到软件应用的开发规划和编码的基本功能。虽然用于规划的可选工具不多,但用于代码维护的工具却很多。通常,项目的实现目标是在规划阶段确定的。当项目团队成员开始编写代码时,他们就进入了所谓的编码阶段。程序代码可以用任何语言编写,但我们需要配备相应的版本控制工具进行维护。如今,在这样的持续开发DevOps工具中,最受用户欢迎的有:Git、SVN、Mercurial、CVS、JIRA。那么,您真的了解保留代码主要版本的重要性吗?让我们从两个方面讨论它对开发和运营的影响:只有版本(尤其是存储在中央存储库中的版本)得到管理,我们才能确保可信代码的统一来源。在此基础上,所有开发者都可以在最新提交的代码上进行协作。同时,运营人员在规划最新版本时可以确保访问一致的代码。在发布过程中,如果发生各种意外,或者发现程序代码存在严重缺陷或功能故障,运维人员可以轻松快速地回滚或恢复到之前部署的、存在于稳定状态的代码发布。目前,公认的工具是Git和GitHub(https://dzone.com/articles/git-vs-github-demystifying-the-differences)。其中,Git允许开发人员在分布式VCS(版本控制系统)上相互协作。此外,由于它不依赖中央服务器,操作员可以从远程位置对存储库执行各种拉取和推送操作。维护此处代码的中央存储库是GitHub。可见,Git是世界领先的版本控制系统之一。2、持续测试众所周知,开发的代码不能直接部署或发布到生产系统中。我们应该全面测试代码是否存在潜在的错误和性能瓶颈。通常有两种方式进行测试:低效的手工测试和高效快速的自动化测试。如今,自动化在业界得到广泛应用,具有代表性的有Selenium、TestNG、JUnit/NUnit等工具,可以自动执行各种用户自定义的测试用例。让我们来看看这些工具的基本特点:自动化测试节省了大量手动执行各种类型测试的时间、精力和成本。此外,生成报告是他们的一大优势。通过评估测试套件中哪些测试用例失败,操作人员可以更直观地执行任务。此类测试也可以安排在预先指定的时间执行。显然,我们应该在DevOps生命周期中不断尝试各种工具,养成持续测试阶段的习惯。如果要问我最喜欢哪一个?我会告诉你:我会结合使用它们。比如:我会用Selenium做自动化测试,TestNG会生成报告,然后用Jenkins触发持续集成。3、持续集成这个阶段可谓是DevOps最精彩的部分。它在第一个发布过程中发挥了重要作用。它可以最大限度地联合部署持续集成工具和配置管理工具。毫无疑问,当今市场上最流行的持续集成工具是Jenkins。当然,其他流行的CI工具还有Bamboo和Hudson。持续集成工具的主要好处是它能够通过协调自动化工具与其他DevOps生命周期阶段来保持整个DevOps结构完整无缺。也就是说:无论是持续开发、测试或部署工具,还是持续监控工具,还是持续集成工具,都可以与CI工具充分集成。与Git/SVN集成后,Jenkins可以自动安排作业,例如从共享存储库中拉取代码并使其准备好进行构建和测试(即持续开发)。可以将Jenkins设置为在预定时间或在将提交推送到中央存储库时触发构建作业。当与Selenium等测试工具集成时,我们可以实现持续测试。通常,我们可以使用Maven/Ant/Gradle等工具来构建开发的代码。此后,Selenium可以通过创建一组测试用例并逐个执行这些测试用例来自动执行各种代码。在整个过程中,Jenkins/Hudson/Bamboo的作用就是自动化计划。Jenkins/Hudson/Bamboo与持续部署工具集成后,可以通过配置管理和容器化工具触发部署计划。此外,Jenkins/Hudson可以与Splunk、ELK、Nagios或NewRelic等监控工具集成,以持续监控已部署服务器的状态和性能。4.持续部署在讨论了从头构建代码的工具和测试工具之后,现在让我们看看配置管理工具或容器化工具。两组工具都有助于在DevOps中实现持续部署(CD)。事实上,持续部署是一个软件项目的实际落地阶段。当前,配置管理工具具有以下特点:通常,配置管理需要在应用程序的功能需求和性能方面建立和维护一致的行为。简而言之,它是将部署发布到服务器、在所有服务器上安排更新并在所有服务器上维护一致配置的行为。业界常用的这类工具有:Puppet、Chef、Ansible、SaltStack,其中最好的是Puppet。这些工具基于主从(master-slave)架构。当新的部署被发送到主服务器时,主服务器负责在所有从服务器上复制这些更改。再看容器化工具:容器化工具作为一套工具,可以帮助运维人员在开发、测试和部署应用程序的环境中保持一致性。通过打包和复制开发/测试/暂存环境中经常使用的相同依赖项和包,容器化工具极大地消除了生产环境中出现错误和故障的可能性。Docker是最早和成熟的容器化工具之一。过去,由于开发人员使用各种虚拟机和服务器,他们必须手动管理以在生产环境中保持一致的状态。现在,借助Docker容器,您可以轻松地自动化维护一致性。近年来,许多云应用解决方案开始提供对容器服务的支持。其中,AmazonECS、AzureContainerService和GoogleContainerEngine都可以为Docker容器提供原生的云服务支持。这也是Docker能够被广泛使用的原因之一。当然,还有其他类型的容器化工具:Vagrant。5.持续监控如果我们不监控应用程序的性能,那么开发和部署应用程序的意义何在?即使是综合测试,也难免漏掉一些潜在的错误或性能问题。因此,持续监控和应用开发同样重要。目前流行的属于这一阶段的监控工具有:Splunk、ELKStack、Nagios、Sensu、NewRelic。它们与Jenkins结合使用,让运营商实现持续监控。总的来说,持续监控工具的必要性在于以下两个方面:由于程序缺陷会给服务提供者带来经济损失,我们需要通过持续监控的频率和后果来尽量减少功能错误的发生。监控工具可以在用户遇到广泛的故障并造成糟糕的体验之前报告故障或服务水平突然下降。Splunk和ELKstack是这个领域中相互竞争的两个重要工具。它们虽然可以提供几乎相似的功能,但具体提供的方式却不尽相同。Splunk是一个非常易于使用的业务工具。ELK堆栈是三个开源工具的组合:ElasticSearch、LogStash和Kibana。虽然可以免费使用,但ELK不像Splunk那样容易设置。我建议您亲自试用这两种工具,以选择哪一种更适合您的项目。原标题:HowToCombineDevOpsToolsToSolveOurProblems,作者:SahitiKappagantula
