使用 Azure Pipelines 的 CI/CD 基线体系结构

本文介绍用于将应用程序更改部署到 Azure 中的过渡环境和生产环境的概要 DevOps 工作流。 该解决方案通过 Azure Pipelines 使用持续集成/持续部署 (CI/CD) 做法。

重要

本文介绍使用 Azure Pipelines 的常规 CI/CD 体系结构。 它不涉及部署到不同环境(例如 Azure 应用服务、虚拟机和 Azure Power Platform)的具体内容。 部署平台的详细信息在单独的文章中介绍。

体系结构

使用 Azure Pipelines 的 CI/CD 管道的体系结构示意图。

下载此体系结构的 Visio 文件

注意

虽然本文介绍的是通过 CI/CD 实现应用程序更改,但 Azure Pipelines 也可用于生成 CI/CD 管道以实现基础结构即代码 (IaC) 更改。

数据流

数据流经方案的情形如下所示:

  1. PR 管道 - 针对 Azure Repos Git 的拉取请求 (PR) 会触发 PR 管道。 此管道运行快速质量检查。 这些检查应该包括:

    • 生成需要从依赖项管理系统拉取依赖项的代码。
    • 使用工具来分析代码,例如静态代码分析、Lint 分析和安全扫描
    • 单元测试

    如果任何检查失败,管道运行将结束,开发人员必须进行所需的更改。 如果所有检查都通过,则管道应需要 PR 评审。 如果 PR 评审不通过,管道将结束,开发人员必须进行所需的更改。 如果所有检查和 PR 评审都通过,PR 将成功合并。

  2. CI 管道 - 针对 Azure Repos Git 的合并会触发 CI 管道。 此管道运行的检查与 PR 管道相同,并增加一些重要内容。 CI 管道会运行集成测试。 这些集成测试不应要求部署解决方案,因为尚未创建生成工件。 如果集成测试需要机密,则该管道会从 Azure Key Vault 获取这些机密。 如果任何检查失败,管道将结束,开发人员必须进行所需的更改。 成功运行此管道的结果是创建并发布生成工件

  3. CD 管道触发器 - 发布工件会触发 CD 管道

  4. CD 发布到过渡环境 - CD 管道下载在 CI 管道中创建的生成工件,并将解决方案部署到过渡环境。 然后,管道针对过渡环境运行验收测试,以便验证部署。 如果有任何验收测试不通过,管道都将结束,开发人员必须进行所需的更改。 如果测试成功,则可以执行手动验证任务,要求个人或小组验证部署并继续管道。

  5. CD 发布到生产环境 - 如果手动干预已恢复,或者未实施手动干预,则管道会将解决方案发布到生产环境。 管道应在生产环境中运行冒烟测试,以确保发布按预期工作。 如果手动干预步骤导致取消、发布失败或冒烟测试失败,则发布将回滚,管道将结束,开发人员必须进行所需的更改。

  6. 监视 - Azure Monitor 收集可观测性数据(例如日志和指标),以便操作员可以分析运行状况、性能和使用情况数据。 Application Insights 收集所有特定于应用程序的监视数据,例如跟踪。 Azure Log Analytics 用于存储所有这些数据。

组件

  • Azure Repos Git 存储库充当代码存储库,为协作项目提供版本控制和平台。

  • Azure Pipelines 提供一种生成、测试、打包和发布应用程序及基础结构代码的方法。 此示例有 3 个不同管道,具有以下职责:

    • PR 管道会在允许 PR 通过 lint 分析、生成和单元测试合并前验证代码。
    • CI 管道在代码合并后运行。 它们执行与 PR 管道相同的验证,但如果一切成功,则添加集成测试并发布生成工件。
    • CD 管道部署生成工件、运行验收测试并发布到生产环境。
  • Azure 工件源让你可以管理和共享软件包,例如 Maven、npm 和 NuGet。 使用工件源可以管理包的生命周期,包括包的版本控制、升级和停用。 这有助于确保团队使用最新且最安全的包版本。

  • Key Vault 提供一种方法来管理解决方案的安全数据,包括机密、加密密钥和证书。 在此体系结构中,它用于存储应用程序机密。 这些机密通过管道访问。 Azure Pipelines 可以通过 Key Vault 任务从 Key Vault 链接机密来访问机密。

  • Monitor 是一种收集并存储 Azure 服务的指标和日志、应用程序遥测和平台指标的可观测性资源。 使用此数据可以监视应用程序,设置警报、仪表板,以及针对故障执行根本原因分析。

  • Application Insights 是一种监视服务,可提供对 Web 应用程序的性能和使用情况的实时见解。

  • Log Analytics 工作区提供了一个中心位置,可在其中存储、查询和分析来自多个源(包括 Azure 资源、应用程序和服务)的数据。

备选方法

虽然本文重点介绍 Azure Pipelines,但不妨考虑以下替代方法:

  • Azure DevOps Server(以前称为 Team Foundation Server)可用作本地替代项。

  • Jenkins 是一种用于自动化生成和部署的开源工具。

  • GitHub Actions 让你可直接从 GitHub 自动执行 CI/CD 工作流。

  • GitHub 存储库可以替换为代码存储库。 Azure Pipelines 可与 GitHub 存储库无缝集成。

本文重点介绍 Azure Pipelines 的一般 CI/CD 做法。 下面是可以考虑部署到的一些计算环境:

  • 应用服务是一项基于 HTTP 的服务,用于托管 Web 应用程序、REST API 和移动后端。 可以使用自己喜欢的语言进行开发,应用程序可在基于 Windows 或 Linux 的环境中轻松地运行和缩放。 Web 应用支持过渡和生产等部署槽。 可以将应用程序部署到过渡槽,然后将其发布到生产槽。

  • Azure 虚拟机可以处理需要较高控制度,或者依赖于 Web 应用所不支持的 OS 组件和服务(例如 Windows GAC 或 COM)的工作负载。

  • Azure Power Platform 是一系列云服务的集合,用户无需基础结构或技术专业知识即可生成、部署和管理应用程序。

  • Azure Functions 是一个无服务器计算平台,可用于构建应用程序。 借助 Functions,可利用触发器和绑定集成服务。 Functions 也支持过渡和生产环境等部署槽。 可以将应用程序部署到过渡槽,然后将其发布到生产槽。

  • Azure Kubernetes Service (AKS) 是 Azure 中的托管 Kubernetes 群集。 Kubernetes 是开源容器业务流程平台。

  • Azure 容器应用让你可在无服务器平台上运行容器化应用程序。

方案详细信息

使用经过验证的 CI 和 CD 做法来部署应用程序或基础结构更改具有各种益处,包括:

  • 发布周期较短 - 自动化 CI/CD 过程让你的部署比手动实践更快。 许多组织每天部署多次。
  • 代码质量更好 - CI 管道中的质量入口(如 Lint 分析和单元测试)会产生更高质量的代码。
  • 发布风险降低 - 适当的 CI/CD 实践可大幅降低发布新功能的风险。 可以在发布之前测试部署。
  • 工作效率提高 - 自动化 CI/CD 可让开发人员无需进行手动集成和部署,从而可以专注于新功能。
  • 启用回滚 - 虽然适当的 CI/CD 实践可降低已发布 bug 或回归的数量,但它们仍会发生。 CI/CD 可以启用自动回滚到早期版本。

可能的用例

对于以下目的,请考虑使用 Azure Pipelines 和 CI/CD 过程:

  • 加速应用程序开发和缩短开发生命周期。
  • 将质量和一致性管理内置到自动化的生成和发布过程中。
  • 提高应用程序稳定性和正常运行时间。

注意事项

这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负载质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架

卓越运营

  • 请考虑实现基础结构即代码 (IaC) 来定义基础结构并将其部署到管道中。

  • 请考虑使用 VSTS 市场中提供的 令牌化任务 之一,在上下文中,通常指的是在部署或配置期间将敏感信息 ((如 API 密钥、密码或其他) 机密)替换为令牌或占位符的过程。

  • 发布 定义中使用发布变量来驱动环境的配置更改。 发布变量的作用域可以是整个发布,也可以是给定的环境。 将变量用于机密信息时,请确保选择挂锁图标。

  • 如果要部署到在受保护的虚拟网络中运行的资源,请考虑使用自托管代理。 如果运行大量生成,还可以考虑使用自托管代理。 在生成量较大的情况下,可以使用自托管代理以经济高效的方式加快生成速度。

  • 考虑尽早在发布管道中使用 Application Insights 和其他监视工具。 许多组织只在其生产环境中开始监视。 如果监视其他环境,则可以提前在开发过程中识别 Bug,避免生产环境中出现问题。

  • 请考虑对生产环境使用单独的监视资源。

  • 考虑使用 YAML 管道,而不是经典接口。 YAML 管道可像其他代码一样对待。 例如,可以将 YAML 管道签入到源代码管理和版本控制中。

  • 考虑使用 YAML 模板来促进重复使用和简化管道。 例如,PR 和 CI 管道类似。 单个参数化模板可用于这两种管道。

  • 请考虑创建过渡和生产环境以外的环境,以支持手动用户验收测试、性能和负载测试以及回滚等活动。

成本优化

成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述

Azure DevOps 成本取决于组织中需要访问权限的用户数和其他因素,例如,所需的并发生成/发布数,以及测试用户数。 有关详细信息,请参阅 Azure DevOps 定价

定价计算器提供 20 个用户运行 Azure DevOps 的估计费用。

Azure DevOps 按每月每个用户计费。 可能存在额外费用,具体取决于所需的并发管道数,以及是否有其他测试用户,或者是否使用了基本的用户许可证。

安全性

  • 在选择是使用 Microsoft 托管代理还是自托管代理时,请考虑使用 Microsoft 托管代理的安全优势

  • 确保通过管道完成对环境的所有更改。 以最低特权原则实现基于角色的访问控制 (RBAC),防止用户访问环境。

  • 请考虑在 Azure Pipelines 中集成步骤,以跟踪依赖项,管理许可,扫描漏洞并将依赖项保持为最新状态。

后续步骤

查看以下资源详细了解 CI/CD 和 Azure DevOps: