环境 – 虚拟机资源

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

使用虚拟机 (VM) 资源通过 YAML 管道管理跨多台计算机的部署。 VM 资源允许你在自己的服务器上安装代理以进行滚动部署。

VM 资源连接到环境。 定义环境后,可以通过部署将 VM 添加到目标。 环境中的部署历史视图提供从 VM 到管道的可跟踪性。

先决条件

必须至少拥有基本许可证并可访问以下区域:

  • 已连接到管道的存储库
  • 要连接到环境的 VM

有关 Azure Pipelines 安全性的详细信息,请参阅管道安全资源

若要将 VM 添加到环境,你必须对相应部署池具有管理员角色。 部署池是组织可用的一组目标服务器。 详细了解部署池和环境权限

注意

如果你正在配置部署组代理,或者在注册 VM 环境资源时遇到错误,则必须将 PAT 范围设置为“所有可访问组织”。

创建 VM 资源

注意

可以使用相同的过程通过注册脚本来设置物理计算机。

添加 VM 资源的第一步是定义环境。

定义环境

  1. 选择“创建环境”或“新建环境”,具体取决于这是否为你的第一个环境。
  2. 为环境添加名称(必需)和说明。
  3. 保存新环境。

添加资源

  1. 选择你的环境,然后选择“添加资源”。

  2. 为“资源类型”选择“虚拟机”。 然后,选择“下一步”。

    Add an environment.

  3. 为“操作系统”选择“Windows”或“Linux”。

  4. 复制注册脚本。 如果你选择了“Windows”,则该脚本是一个 PowerShell 脚本;如果选择了“Linux”,则该脚本是一个 Linux 脚本。

    Add a virtual machine.

  5. 在要注册到此环境的每个目标虚拟机上运行复制的脚本。

    • 如果在 Windows 上安装,则需要以 PowerShell 管理员身份运行该脚本。
    • 如果在 Linux 上安装,则需要有权下载和运行可执行脚本。

    注意

    • 已登录用户的个人访问令牌 (PAT) 会包含在该脚本中。 PAT 在生成脚本之日过期。
    • 如果 VM 上已有任何其他正在运行的代理,请为代理提供唯一的名称以注册到环境。
    • 若要详细了解如何安装代理脚本,请参阅自托管 Linux 代理自托管 Windows 代理。 VM 资源的代理脚本类似于自托管代理的脚本,并且你可以使用相同的命令。
  6. 注册 VM 后,它会在环境的“资源”选项卡下显示为环境资源。

  7. 要添加更多 VM,请再次复制脚本。 选择“添加资源”>“虚拟机”。 对于添加到环境中的所有 VM,Windows 和 Linux 脚本是相同的。

  8. 成功安装 VM 脚本后,你的 VM 将显示在环境的资源列表中。

    View resources.

在管道中使用 VM

通过引用环境将管道中的 VM 设为目标。 默认情况下,管道作业将针对使用 resourceName 为环境定义的所有 VM 运行。

trigger: 
- main

pool: 
   vmImage: ubuntu-latest

jobs:
- deployment: VMDeploy
  displayName: Deploy to VM
  environment: 
   name: VMenv
   resourceName: VMenv
   resourceType: virtualMachine
  strategy:
     runOnce:
        deploy:   
          steps:
            - script: echo "Hello world"

注意

resourceType 值区分大小写。 指定不正确的大小写会导致在环境中找不到匹配的资源。 有关详细信息,请参阅 YAML 架构

可以通过按 resourceName 指定虚拟机,从环境中选择仅接收部署的特定虚拟机。 例如,若要将部署目标限定为 VMenv 环境中名为 USHAN-PC 的虚拟机资源,请添加 resourceName 参数并为其指定值 USHAN-PC

trigger: 
- main

pool: 
   vmImage: ubuntu-latest

jobs:
- deployment: VMDeploy
  displayName: Deploy to VM
  environment: 
    name: VMenv
    resourceType: virtualMachine
    resourceName: USHAN-PC # only deploy to the VM resource named USHAN-PC
  strategy:
    runOnce:
      deploy:   
          steps:
          - script: echo "Hello world"

若要详细了解部署作业,请参阅 YAML 架构

添加和管理标记

标记提供了一种在部署环境中将一组特定 VM 设为目标的方式。 可以将标记作为交互式注册脚本的一部分添加到 VM,或者通过 UI 添加。 每个标记限制为 256 个字符。 可以使用的标记数量没有限制。

通过在 UI 中的资源视图中选择 VM 资源对应的“更多操作”来添加或删除标记。

Set VM tags.

选择多个标记时,包含所有标记的 VM 将在管道中使用。 例如,此管道以具有 windowsprod 标记的 VM 为目标。 如果 VM 只有这些标记中的一个,则不会将该 VM 设为目标。

trigger: 
- main

pool: 
   vmImage: ubuntu-latest

jobs:
- deployment: VMDeploy
  displayName: Deploy to VM
  environment: 
    name: VMenv
    resourceType: virtualMachine
    tags: windows,prod # only deploy to virtual machines with both windows and prod tags
  strategy:
    runOnce:
      deploy:   
          steps:
          - script: echo "Hello world"

应用部署策略

应用部署策略来定义应用程序的推出方式。VM 的 runOnce 策略和 rolling 策略均受支持。 有关部署策略和生命周期挂钩的详细信息,请参阅部署作业/部署策略

查看部署历史记录

选择“部署”选项卡可查看提交和工作项的完整跟踪信息,以及每个环境和资源的跨管道部署历史记录。

VMDeployments_view

从环境中删除 VM

Windows 环境

若要从 Windows 环境中删除 VM,请运行以下命令。 确保执行以下任务:

  • 从管理员 PowerShell 命令提示符运行命令
  • 在每台计算机上运行命令
  • 在运行环境注册命令的同一文件夹路径中运行命令
./config.cmd remove

Linux 环境

若要从 Linux 环境中删除 VM,请在每台计算机上运行以下命令。

./config.sh remove

已知的限制

重试某个阶段时,将在所有 VM 而不仅仅是失败的目标上重新运行部署。