今天,人们希望比以往更快地看到他们最喜欢的应用程序与最新的花里胡哨。开发人员花费数年时间开发和发布新软件产品的日子已经一去不复返了。因此,每个软件开发公司都需要一个有效的 DevOps 管道来跟上客户的需求。本文介绍了 DevOps 管道的基本概念,管道如何在 DevOps 环境中工作,并解释了代码在部署到生产之前必须经过的阶段。
什么是 DevOps 管道?
DevOps 管道是开发 (Dev) 和运营 (Ops) 团队实施的一组实践,用于更快、更轻松地构建、测试和部署软件。管道的主要目的之一是保持软件开发过程的组织和重点。不过,“管道”一词可能有点误导。汽车厂的装配线可能是一个更合适的类比,因为 软件开发是一个连续的循环。
在制造商向公众发布汽车之前,它必须通过无数的组装阶段、测试和质量检查。工人必须建造底盘、添加电机、车轮、车门、电子设备和完成油漆工作,以使其对客户具有吸引力。DevOps 管道的工作方式类似。
在向用户发布应用程序或新功能之前,您首先必须编写代码。然后,确保它不会导致任何可能导致应用程序崩溃的致命错误。避免这种情况涉及运行各种测试以找出任何错误、错别字或错误。最后,一旦一切按预期工作,您就可以将代码发布给用户。从这个简化的解释中,您可以得出结论,DevOps 管道由构建、测试和部署阶段组成。
DevOps 管道的组件
为确保代码从一个阶段无缝移动到下一个阶段,需要实施多种 DevOps 策略和实践。其中最重要的是 持续集成 和 持续交付(CI/CD)。
持续集成
持续集成 (CI) 是一种将来自多个开发人员的小块代码尽可能频繁地集成到共享代码存储库中的方法。使用 CI 策略,您可以自动测试代码中的错误,而无需等待其他团队成员贡献他们的代码。CI 的主要好处之一是它可以帮助大型团队防止所谓的 集成地狱。
在软件开发的早期,开发人员必须等待很长时间才能提交代码。这种延迟显着增加了代码集成冲突和错误代码部署的风险。与旧的做事方式相反,CI 鼓励开发人员每天提交他们的代码。因此,他们可以更快地发现错误,并最终花费更少的时间来修复它们。CI 的核心是 中央源代码控制系统。它的主要目的是帮助团队组织他们的代码、跟踪更改并启用自动化测试。
在典型的 CI 设置中,每当开发人员将新代码推送到共享代码存储库时,自动化就会启动以将新代码和现有代码编译到构建中。如果构建过程失败,开发人员会收到警报,通知他们哪些代码行需要重做。确保只有高质量的代码通过管道是至关重要的。因此,每次有人向共享存储库提交新代码时,都会重复整个过程。
持续交付
持续交付 (CD) 是 CI 的扩展。它涉及通过鼓励开发人员以增量块的形式将代码发布到生产环境来加快发布过程。通过 CI 阶段后,代码构建将移至暂存区。在管道中的这一点上,由您决定是将构建推送到生产还是保留它以进行进一步评估。在典型的 DevOps 场景中,开发人员首先将他们的代码推送到类似生产的环境中以评估其行为方式。但是,新版本也可以立即上线,开发人员只需按一下按钮即可随时部署它。
要充分利用持续交付,请尽可能频繁地部署代码更新。发布频率取决于工作流程,但通常是每天、每周或每月。与一次发布所有更改相比,以更小的块发布代码更容易解决问题。因此,您可以避免瓶颈和合并冲突,从而保持稳定、持续的集成管道流。
持续部署
持续交付和持续部署在许多方面都相似,但两者之间存在关键差异。虽然持续交付使开发团队能够手动部署软件、功能和代码更新,但持续部署就是自动化整个发布周期。
在持续部署阶段,代码更新会自动发布给最终用户,无需任何人工干预。但是,实施自动发布策略可能很危险。如果它未能缓解沿途检测到的所有错误,那么不良代码将被部署到生产环境中。在最坏的情况下,这可能会导致应用程序中断或用户遇到停机时间。
仅在发布次要代码更新时才应使用自动部署。如果出现问题,您可以回滚更改而不会导致应用程序出现故障。要充分利用持续部署的潜力,需要拥有强大的测试框架,以确保新代码真正没有错误并准备好立即部署到生产环境中。
持续测试
持续测试是在开发过程的每个阶段尽可能频繁地运行测试以在到达生产环境之前检测问题的做法。实施持续测试策略可以快速评估交付管道中特定候选版本的业务风险。
测试范围应涵盖功能测试和非功能测试。这包括处理应用程序和服务器基础架构的安全和性能方面的运行单元、系统、集成和测试。持续测试包括更广泛的质量控制,包括风险评估和遵守内部政策。
持续运营
拥有全面的持续运营策略有助于保持应用程序和环境的最大可用性。目标是让用户不知道不断发布代码更新、错误修复和补丁。持续运营策略有助于防止代码发布期间出现停机和可用性问题。要获得持续运营的好处,您需要有一个强大的 自动化和编排 架构,可以处理服务器、数据库、容器、网络、服务和应用程序的持续性能监控。
DevOps 管道的阶段
关于如何构建管道没有固定的规则。DevOps 团队根据他们的特定工作流程添加和删除某些阶段。尽管如此,几乎每个管道都有四个核心阶段: 开发、 构建、 测试和 部署。可以通过添加另外两个阶段( 计划 和 监控)来扩展该设置 ,因为它们在专业的 DevOps 环境中也很常见。
计划
规划阶段涉及在开发人员开始编码之前规划整个工作流程。在这个阶段,产品经理和项目经理起着至关重要的作用。他们的工作是创建一个开发路线图,指导整个团队完成整个过程。
在从用户和利益相关者那里收集反馈和相关信息后,工作被分解成一个任务列表。通过将项目分割成更小、更易于管理的块,团队可以更快地交付结果、当场解决问题并更轻松地适应突然的变化。在 DevOps 环境中,团队在 sprint中工作- 一个较短的时间段(通常为两周),在此期间,各个团队成员都在处理分配给他们的任务。
发展
在开发阶段,开发人员开始编码。根据编程语言,开发人员在他们的本地机器上安装适当的 IDE(Python IDE、Java IDE等)、代码编辑器和其他技术,以实现最大的生产力。
在大多数情况下,开发人员必须遵循某些编码风格和标准,以确保统一的编码模式。这使任何团队成员都更容易阅读和理解代码。当开发人员准备好提交他们的代码时,他们会向共享源代码存储库发出拉取请求。然后,团队成员可以手动审查新提交的代码,并通过批准初始拉取请求将其与主分支合并。
建造
DevOps 管道的构建阶段至关重要,因为它允许开发人员在代码中的错误进入管道并导致重大灾难之前检测到它们。在新编写的代码与共享存储库合并后,开发人员会运行一系列自动化测试。在典型的场景中,拉取请求会启动一个自动化过程,将代码编译成构建 - 可部署的包或可执行文件。
请记住,某些编程语言不需要编译。例如,用 Java 和 C编写的应用程序 需要编译才能运行,而用 PHP 和 Python编写的应用程序 则不需要。如果代码有问题,构建会失败,并且会通知开发人员这些问题。如果发生这种情况,初始拉取请求也会失败。开发人员每次提交到共享存储库时都会重复此过程,以确保只有无错误的代码继续沿管道传输。
测试
如果构建成功,则进入测试阶段。在那里,开发人员运行手动和自动测试以进一步验证代码的完整性。在大多数情况下, 会执行用户验收测试 。人们以最终用户的身份与应用程序进行交互,以确定代码在将其发送到生产环境之前是否需要进行额外的更改。在这个阶段,执行安全、性能和负载测试也 很常见。
部署
当构建到达 Deploy 阶段时,软件已准备好推送到生产环境。如果代码只需要较小的更改,则使用自动部署方法。但是,如果应用程序经历了大修,则首先将构建部署到类似生产的环境中,以监控新添加的代码的行为方式。在发布重大更新时,实施 蓝绿部署策略 也很常见。
蓝绿色部署意味着拥有两个相同的生产环境,其中一个环境托管当前应用程序,而另一个环境托管更新版本。要将更改发布给最终用户,开发人员可以简单地将所有请求转发到适当的服务器。如果出现问题,开发人员可以简单地恢复到以前的生产环境,而不会导致服务中断。
监视器
在 DevOps 管道的最后阶段,运营团队努力工作,持续监控基础架构、系统和应用程序,以确保一切顺利运行。他们从日志、分析和监控系统以及用户反馈中收集有价值的数据,以发现任何性能问题。在 Monitor 阶段收集的反馈用于提高 DevOps 管道的整体效率。在每个发布周期之后调整管道以消除潜在的瓶颈或其他可能阻碍生产力的问题是一种很好的做法。
如何创建 DevOps 管道
现在您已经更好地了解了 DevOps 管道是什么以及它是如何工作的,让我们探索创建 CI/CD 管道时所需的步骤。
设置源代码控制环境
在您和团队开始构建和部署代码之前,请确定源代码的存储位置。 GitHub 是迄今为止最受欢迎的代码托管网站。GitLab 和 BitBucket 是强大的替代品。
要开始使用 GitHub,请打开一个免费帐户并创建一个共享存储库。要将代码推送到 GitHub,首先 在本地机器上安装 Git 。完成代码编写后,将其推送到共享源代码存储库。如果多个开发人员正在开发同一个项目,其他团队成员通常会在将新代码与主分支合并之前手动查看新代码。
设置构建服务器
一旦代码在 GitHub 上,下一步就是对其进行测试。针对代码运行测试有助于防止向用户部署错误、错误或拼写错误。许多测试可以确定代码是否可以生产。决定运行哪些分析取决于项目的范围和用于运行应用程序的编程语言。
创建构建的两个最流行的解决方案是 Jenkins 和 Travis-CI。Jenkins 是完全免费和开源的,而 Travis-CI 是一个托管解决方案,也是免费的,但仅适用于开源项目。要开始运行测试, 请在服务器上安装 Jenkins 并将其连接到 GitHub 存储库。然后,您可以将 Jenkins 配置为在每次更改共享存储库中的代码时运行。它编译代码并创建一个构建。在构建过程中,Jenkins 会在遇到任何问题时自动发出警报。
运行自动化测试
有许多测试,但最常见的是 单元测试、 集成测试和 功能测试。根据开发环境,最好安排 自动测试一个 接一个地运行。通常,您希望在测试过程开始时运行最短的测试。例如,您将在功能测试之前运行单元测试,因为它们通常需要更多时间才能完成。如果构建顺利通过测试阶段,您可以将代码部署到生产环境或类似生产环境以进行进一步评估。
部署到生产
在将代码部署到生产环境之前,首先设置服务器基础架构。例如,要部署 Web 应用程序,您需要 安装像 Apache 这样的 Web 服务器。假设应用程序将在云中运行,您很可能会将其部署到虚拟机。对于需要物理硬件的全部处理潜力的应用程序,您可以部署到专用服务器或 裸机云服务器。
部署应用程序有两种方法—— 手动 或 自动。首先,最好手动部署代码以了解部署过程。后来,自动化可以加快这个过程,但只有你有信心,才会有障碍阻止糟糕的代码最终进入生产环境。将代码发布到生产环境是一个简单的过程。最简单的部署方法是配置构建服务器以执行自动将代码发布到生产环境的脚本。
结束时
现在您了解什么是 devops 管道以及它如何帮助加快您的软件开发生命周期。然而,这只是冰山一角。DevOps 管道是一个广泛的主题,每个组织都会有自己的方式将其集成到他们的工作流程中。最终目标是创建一个可重复的系统,利用自动化并实现持续改进,以帮助更快、更轻松地交付高质量的产品。