使用 Azure Pipelines 中的部署组部署到 Azure VM

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

在早期版本的 Azure Pipelines 中,需要部署到多台服务器的应用程序需要进行大量的计划和维护。 必须手动启用 Windows PowerShell 远程处理,打开所需的端口,并在每台服务器上安装部署代理。 如果需要推出部署,则必须手动管理管道。

随着部署组的引入,上述所有挑战都已顺利解决。

部署组在配置组中的每个目标服务器上安装部署代理,并指示发布管道逐步将应用程序部署到这些服务器。 可以为推出部署创建多个管道,以便可以将应用程序的最新版本分阶段交付给多个用户组,用于验证新引入的功能。

注意

部署组是经典管道中使用的概念。 如果使用 YAML 管道,请参阅环境

在本教程中,你将学习:

  • 使用模板将 VM 基础结构预配到 Azure
  • 创建 Azure Pipelines 部署组
  • 创建并运行 CI/CD 管道以使用部署组部署解决方案

先决条件

  • 一个 Microsoft Azure 帐户。
  • Azure DevOps 组织。

使用 Azure DevOps 演示生成器在 Azure DevOps 组织中预配教程项目。

设置 Azure 部署环境

使用 ARM 模板在 Azure 上提供以下资源:

  • 配置了 IIS 的六台虚拟机 (VM) Web 服务器
  • SQL Server VM(数据库服务器)
  • Azure 网络负载均衡器
  1. 单击下面的“部署到 Azure”链接,启动资源预配。 提供所有必要的信息,然后选择“购买”。 可以使用允许的管理用户名和密码的任意组合,因为本教程不会再用到它们。 Env 前缀名称是所有资源名称的前缀,以确保生成的资源具有全局唯一名称。 尽量使用个人或随机内容,但如果在验证或创建过程中发现命名冲突错误,请尝试更改此参数并再次运行。

    部署到 Azure

    显示如何设置 Azure 部署环境的屏幕截图。

    注意

    完成部署大约需要 10-15 分钟。 如果收到任何命名冲突错误,请尝试更改针对 Env 前缀名称提供的参数。

  2. 部署完成后,可以使用 Azure 门户查看指定资源组中生成的所有资源。 选择名称中带有“sqlSrv”的数据库服务器 VM 以查看其详细信息。

    资源组部署到 Azure。

  3. 记下 DNS 名称。 在后面的步骤中需要使用此值。 可以使用“复制”按钮将其复制到剪贴板。

    SQL DNS 部署到 Azure。

创建和配置部署组

使用 Azure Pipelines 可以更轻松地组织部署应用程序所需的服务器。 部署组是一个包含部署代理的虚拟机集合。 每台计算机都与 Azure Pipelines 进行交互,以协调应用部署。

由于生成管道不需要配置更改,因此在预配项目后会自动触发生成。 稍后将发布排入队列时,将使用此生成。

  1. 导航到演示生成器创建的 Azure DevOps 项目。

  2. 在“管道”下,导航到“部署组”。

    导航到“管道”下的“部署组”

  3. 选择“添加部署组”。

  4. 输入“发布”的“部署组名称”,然后选择“创建”。 生成注册脚本。 如果以自己的方式工作,可以使用提供的脚本注册目标服务器。 但是,在本教程中,目标服务器会自动注册为发布管道的一部分。 发布定义使用阶段将应用程序部署到目标服务器。 阶段是任务的逻辑分组,用于定义要对其执行任务的运行时目标。 每个部署组阶段在部署组中定义的计算机上执行任务。

  5. 在“管道”下,导航到“发布”。 选择名为“部署组”的发布管道,然后选择“编辑”。

  6. 选择“任务”选项卡,查看管道中的部署任务。 任务分为三个阶段:代理阶段、部署组阶段和 IIS 部署阶段。

  7. 选择“代理阶段”。 在此阶段中,目标服务器使用 Azure 资源组部署任务与部署组相关联。 若要运行,必须定义代理池和规范。 选择“Azure Pipelines”池和“windows-latest”规范。

    配置代理阶段

  8. 选择“Azure 资源组部署”任务。 为之前用于创建基础结构的 Azure 订阅配置服务连接。 授权连接后,选择为本教程创建的资源组。

    创建 Azure 服务连接

  9. 此任务将在 Azure 中托管的虚拟机上运行,并且需要能够连接回此管道,才能完成部署组要求。 若要保护连接,它们需要个人访问令牌 (PAT)。 从“用户设置”下拉列表中,在新选项卡中打开“个人访问令牌”。大多数浏览器支持通过右键单击上下文菜单或“Ctrl+单击”在新选项卡中打开链接。

    导航到“个人访问令牌”

  10. 在新标签页中,选择“新建令牌”。

  11. 输入名称并选择“完全访问”范围。 选择“创建”以创建令牌。 创建后,复制令牌并关闭浏览器选项卡。返回到 Azure Pipeline 编辑器。

    创建个人访问令牌

  12. 在“Azure Pipelines 服务连接”下,选择“新建”。

    添加 Azure Pipelines 服务连接

  13. 输入 Azure DevOps 当前实例的连接 URL。 此 URL 类似于 https://dev.azure.com/[Your account]。 粘贴之前创建的“个人访问令牌”,并指定“服务连接名称”。 选择“验证并保存”。

    创建 Azure Pipelines 服务连接

    注意

    若要注册代理,你必须是代理池中管理员角色的成员。 只有在注册时才需要代理池管理员身份。 管理员标识不会保留在代理上,也不会在代理与 Azure Pipelines 之间的任何后续通信中使用。 注册代理后,无需续订个人访问令牌,因为仅在注册时需要该令牌。

  14. 选择当前的“团队项目”和之前创建的“部署组”。

    配置 Azure Pipelines 部署组

  15. 选择“部署组阶段”。 此阶段在部署组中定义的计算机上执行任务。 此阶段链接到“SQL-Svr-DB”标记。 从下拉列表中选择“部署组”。

    配置部署组阶段

  16. 选择“IIS 部署阶段”。 此阶段使用指定的任务将应用程序部署到 Web 服务器。 此阶段链接到“WebSrv”标记。 从下拉列表中选择“部署组”。

  17. 选择“断开 Azure 网络负载均衡器连接”任务。 由于目标计算机已连接到 NLB,因此,此任务将在部署之前断开计算机与 NLB 的连接,并在部署后将其重新连接到 NLB。 将任务配置为使用 Azure 连接、资源组和负载均衡器(应只有一个)。

  18. 选择“IIS Web 应用管理”任务。 此任务在向为任务/阶段配置的部署组注册的部署目标计算机上运行。 它在本地创建名为“PartsUnlimited”的 Web 应用和应用程序池,该池在端口 80 下运行

  19. 选择“IIS Web 应用部署”任务。 此任务在向为任务/阶段配置的部署组注册的部署目标计算机上运行。 它使用“Web 部署”将应用程序部署到 IIS 服务器。

  20. 选择“连接 Azure 网络负载均衡器”任务。 将任务配置为使用 Azure 连接、资源组和负载均衡器(应只有一个)。

  21. 选择“变量”选项卡并输入变量值,如下所示。

    变量名称 变量值:
    DatabaseName PartsUnlimited-Dev
    DBPassword P2ssw0rd@123
    DBUserName sqladmin
    DefaultConnectionString Data Source=[YOUR_DNS_NAME];Initial Catalog=PartsUnlimited-Dev;User ID=sqladmin;Password=P2ssw0rd@123;MultipleActiveResultSets=False;Connection Timeout=30;
    ServerName localhost

    重要

    请确保在 DefaultConnectionString 变量中替换 SQL Server DNS 名称(之前在 Azure 门户中记下的名称)。

    替换 SQL DNS 后,DefaultConnectionString 应与此字符串类似:

    Data Source=cust1sqljo5zndv53idtw.westus2.cloudapp.azure.com;Initial Catalog=PartsUnlimited-Dev;User ID=sqladmin;Password=P2ssw0rd@123;MultipleActiveResultSets=False;Connection Timeout=30;

    最终的变量列表应如下所示:

    配置管道变量

    注意

    你可能会收到错误,指出必须将 DefaultConnectionString 变量保存为机密。 如果发生这种情况,请选择变量,然后单击变量值旁边的挂锁图标来实施保护。

将发布排入队列并查看部署

  1. 选择“保存”并确认。

  2. 选择“创建发布”并确认。 跟踪发布直到完成。 然后,就可以查看部署了。

  3. 在 Azure 门户,打开资源组中的一个 Web VM。 可以选择任何名称中带有 websrv 的 VM。

    查找 Web VM

  4. 复制 VM 的“DNS”。 Azure 负载均衡器将在负载均衡集中定义的正常服务器实例之间分配传入流量。 因此,所有 Web 服务器实例的 DNS 都是相同的。

    查找 Web 应用域

  5. 打开新的浏览器选项卡,转到 VM 的 DNS。 确认已部署的应用正在运行。

    审阅应用

摘要

在本教程中,你已使用 Azure Pipelines 和部署组将 Web 应用程序部署到一组 Azure VM。 虽然此方案涵盖少量计算机,但你可以轻松地纵向扩展该过程,以使用几乎任何配置支持数百甚至数千台计算机。

清理资源

本教程在 Azure 中创建了一个 Azure DevOps 项目和一些资源。 如果你不打算继续使用这些资源,请按以下步骤删除它们:

  1. 删除由 Azure DevOps 演示生成器创建的 Azure DevOps 项目。

  2. 在本教程中创建的所有 Azure 资源都已分配到创建期间指定的资源组。 删除该组将会删除其中包含的资源。 可以通过以下 CLI 或门户完成此删除。

后续步骤