快速入门:使用 Azure CLI 创建托管 DevOps 池

本文介绍如何使用 Azure CLI 创建托管 DevOps 池,以及如何在其中运行管道。

先决条件

  • 管理的 DevOps 池先决条件

    在完成本文中的步骤之前,必须已配置 Azure 订阅和 Azure DevOps 组织以用于托管 DevOps 池,如 先决条件 文章中所述。 每个 Azure 订阅和 Azure DevOps 组织只需完成一次这些步骤。

  • Azure CLI 先决条件

    • 若要在本地计算机上运行 Azure CLI 命令,请参阅 Azure CLI 安装说明。 如果已安装 Azure CLI,请运行 az version 以检查版本。 托管 DevOps 池的 Azure CLI 扩展需要 Azure CLI 2.57.0 或更高版本。 如果 Azure CLI 低于 2.57.0,请运行 az upgrade。 有关详细信息,请参阅如何更新 Azure CLI

    • 若要通过浏览器使用 Azure Cloud Shell ,请按照 Azure Cloud Shell 临时会话入门 中的说明注册 Microsoft.CloudShell 命名空间。 每个订阅只需注册一次命名空间。

      以下示例使用 bash,因此,如果使用 Azure Cloud Shell,请在启动 Azure Cloud Shell 时选择 Bash

登录 Azure CLI

打开命令提示符(在 Windows 上,使用 Windows 命令提示符或 PowerShell),并运行以下命令。

  1. 登录 Azure CLI。 如果使用 Azure Cloud Shell ,则无需运行 az login ,除非要使用其他帐户。

    az login
    
  2. 如果有多个 Azure 订阅,请设置默认的 Azure 订阅。

    az account set --subscription "My subscription name"
    

    若要获取订阅列表,可以运行以下命令。

    az account list -o table
    

    如果有多个租户,或者想要详细了解如何使用 Azure CLI 使用 Azure 订阅,请参阅 如何使用 Azure CLI 管理 Azure 订阅。

定义环境变量

  1. 运行以下命令以生成本快速入门中资源的名称。 此示例使用 EastUS2 该区域。 替换为 EastUS2 所需的区域。

    export REGION=EastUS2
    export RANDOM_ID="$(openssl rand -hex 3)"
    export RESOURCE_GROUP_NAME="myManagedDevOpsPoolGroup$RANDOM_ID"
    export POOL_NAME="mdpPool$RANDOM_ID"
    export DEV_CENTER_NAME="mdpDevCenter$RANDOM_ID"
    export DEV_CENTER_PROJECT_NAME="mdpDevCenterProject$RANDOM_ID"
    
    # Echo the generated resource names
    echo $REGION
    echo $RESOURCE_GROUP_NAME
    echo $POOL_NAME
    echo $DEV_CENTER_NAME
    echo $DEV_CENTER_PROJECT_NAME
    

创建资源组

  1. 运行以下命令,创建资源组以包含本快速入门中使用的资源。

    az group create --name $RESOURCE_GROUP_NAME --___location $REGION
    

创建开发人员中心和开发人员中心项目

  1. 运行以下命令,安装 Azure CLI devcenter 扩展(如果未安装),并更新到最新版本(如果已安装)。

    az extension add --name devcenter --upgrade
    
  2. 运行以下命令以创建开发人员中心和开发人员中心项目。

    # Create a dev center
    az devcenter admin devcenter create -n $DEV_CENTER_NAME \
        -g $RESOURCE_GROUP_NAME \
        -l $REGION
    
    # Save the id of the newly created dev center
    DEVCID=$( \
        az devcenter admin devcenter show -n $DEV_CENTER_NAME \
        -g $RESOURCE_GROUP_NAME \
        --query id -o tsv)
    
    # Create a dev center project
    az devcenter admin project create -n $DEV_CENTER_PROJECT_NAME \
        --description "My dev center project." \
        -g $RESOURCE_GROUP_NAME \
        -l $REGION \
        --dev-center-id $DEVCID
    
    # Save the dev center project for use when creating
    # the Managed DevOps Pool
    DEVCPID=$( \
        az devcenter admin project show -n $DEV_CENTER_PROJECT_NAME \
        -g $RESOURCE_GROUP_NAME \
        --query id -o tsv)
    

    片刻后,输出指示已创建开发人员中心。 创建的 id 开发人员中心已保存到 DEVCID 其中,用于创建开发人员中心项目。

    {
        "devCenterUri": "https://...",
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/resourceGroupName/providers/Microsoft.DevCenter/devcenters/devCenterName",
        "___location": "eastus",
        "name": "devCenterName",
        "provisioningState": "Succeeded",
        "resourceGroup": "resourceGroupName",
        "systemData": { ... },
        "type": "microsoft.devcenter/devcenters"
    }
    

    再过一会儿,输出将指示已创建开发人员中心项目。 id创建的开发人员中心项目的保存位置DEVCPID,并在下一部分创建托管 DevOps 池时使用。

    {
      "description": "My dev center project.",
      "devCenterId": "...",
      "devCenterUri": "https://...",
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/resourceGroupName/providers/Microsoft.DevCenter/projects/devCenterProjectName",
      "___location": "eastus",
      "name": "devCenterProjectName",
      "provisioningState": "Succeeded",
      "resourceGroup": "resourceGroupName",
      "systemData": { ... },
      "type": "microsoft.devcenter/projects"
    }
    

准备托管 DevOps 池配置文件

该方法 mdp pool create 具有多个参数,这些参数采用 JSON 值来配置池的不同方面。

  • agent-profile 指定池是有状态还是无状态,并且包含备用代理计划。 它是一个字典,其名称 Stateful 为单个键,具体取决于 Stateless所需的代理配置。 有关属性的详细信息 agent-profile ,请参阅 “配置缩放”。
  • fabric-profile 指定代理大小、VM 映像、OS 磁盘和附加存储。 有关属性的详细信息,请参阅fabric-profile”和“配置其他存储”。
  • organization-profile 指定可以使用池的 Azure DevOps 组织和项目。 有关设置的详细信息 organization-profile ,请参阅 “配置安全设置 - 配置组织访问权限”。

创建以下三个文件,并将其保存到计划运行 Azure CLI 命令以创建池的文件夹。

  1. 创建包含以下内容的名为 agent-profile.json 的文件。

    {
      "Stateless": {}
    }
    

    此配置指定 池的无状态代理

  2. 创建包含以下内容的名为 fabric-profile.json 的文件。

    {
      "vmss": {
        "sku": {
          "name": "Standard_D2as_v5"
        },
        "images": [
          {
            "aliases": [
              "ubuntu-24.04"
            ],
            "buffer": "*",
            "wellKnownImageName": "ubuntu-24.04/latest"
          }
        ],
        "osProfile": {
          "secretsManagementSettings": {
            "observedCertificates": [],
            "keyExportable": false
          },
          "logonType": "Service"
        },
        "storageProfile": {
          "osDiskStorageAccountType": "Standard",
          "dataDisks": []
        }
      }
    }
    

    此配置指定使用Standard_D2as_v5映像、ubuntu-24.04Azure Pipelines 映像,以及标准OS 磁盘类型且没有附加数据磁盘的池。

  3. 创建包含以下内容的名为 organization-profile.json 的文件。 替换为 <organization-name> Azure DevOps 组织的名称。

    {
      "AzureDevOps": {
        "organizations": [
          {
            "url": "https://dev.azure.com/<organization-name>",
            "projects": [],
            "parallelism": 1
          }
        ],
        "permissionProfile": {
          "kind": "CreatorOnly"
        }
      }
    }
    

    此配置指定可用于 Azure DevOps 组织中所有项目的池。

创建托管 DevOps 池

  1. 运行以下命令,安装 Azure CLI mdp 扩展(如果未安装),并更新到最新版本(如果已安装)。

     az extension add --name mdp --upgrade
    
  2. 通过运行以下 az mdp pool create 命令创建托管 DevOps 池。

    az mdp pool create -n $POOL_NAME \
       -g $RESOURCE_GROUP_NAME \
       -l $REGION \
       --devcenter-project-id $DEVCPID \
       --maximum-concurrency 1 \
       --agent-profile agent-profile.json \
       --fabric-profile fabric-profile.json \
       --organization-profile organization-profile.json
    

    如果订阅没有容量使用所需的 Azure VM SKU 和最大代理计数配置池,则池创建失败,并出现类似于以下消息的错误。 Cores needed to complete this request is 2, which exceeds the current limit of 0 for SKU family standardDDSv4Family in region eastus. Please choose a different region if possible, or request additional quota at https://portal.azure.com/#view/Microsoft_Azure_Support/NewSupportRequestV3Blade/issueType/quota/subscriptionId/subscription_id_placeholder/topicId/3eadc5d3-b59a-3658-d8c6-9c729ba35b97。 要解决该问题,请参阅查看托管 DevOps 池配额

在Azure 门户中查看创建的池

  1. 登录到 Azure 门户

  2. 搜索 托管 DevOps 池 ,并从可用选项中选择它。

  3. 从列表中选择新的托管 DevOps 池。

  4. 选择 JSON 视图 以查看托管 DevOps 池资源的 JSON 格式。

    池概述中 JSON 视图按钮的屏幕截图。

在 Azure DevOps 中查看代理池

  1. 转到 Azure DevOps 门户并登录到 Azure DevOps 组织(https://dev.azure.com/{your-organization})。

  2. 转到 Azure DevOps>组织设置。

    “组织设置”按钮的屏幕截图。

  3. 转到 Pipelines>代理池,并验证新池是否已列出。 如果刚刚创建了托管 DevOps 池,则新池可能需要一些时间才会显示在代理列表中。

    代理池列表的屏幕截图。

在新池中运行管道

在此步骤中,我们将在 Azure DevOps 项目的默认存储库中创建一个简单的管道,并在新的托管 DevOps 池中运行它。

  1. 转到 Azure DevOps 门户并登录到 Azure DevOps 组织(https://dev.azure.com/{your-organization})。

  2. 转到要在其中运行管道的项目,然后选择“管道”。

    项目列表的屏幕截图。

  3. 选择“新建管道”(或“创建管道”(如果这是第一个管道)。

    “新建管道”按钮的屏幕截图。

  4. 选择 Azure Repos Git

    存储库类型的屏幕截图。

  5. 选择与项目同名的存储库。 在此示例中,该项目名为 FabrikamFiber,因此我们选择具有相同名称的存储库。

    FabrikamFiber 存储库的屏幕截图。

  6. 选择“初学者”管道。

    管道模板列表的屏幕截图。

  7. 默认情况下,初学者模板使用Microsoft托管的 Linux 代理。 编辑管道模板并更改 pool 分区,使其引用在前面的步骤中创建的池。

    # Change these two lines as shown in the following example.
     pool:
      vmImage: ubuntu-latest
    

    在此示例中,将命名fabrikam-managed-pool托管 DevOps 池,因此请替换为vmImage: ubuntu-latestname: fabrikam-managed-pool托管 DevOps 池,并指定托管 DevOps 池的名称。

    # Replace fabrikam-managed-pools with the name
    # of your Managed DevOps Pool.
    pool:
      name: fabrikam-managed-pool
    
  8. 选择“ 保存并运行”,然后选择“ 保存”并再次运行 以确认。

    保存和运行按钮的屏幕截图。

  9. 如果这是此池中的第一个管道运行,则可能需要在管道运行之前授予权限。 有关详细信息,请参阅 此管道需要权限才能访问资源,然后才能继续运行

  10. 观看 Azure DevOps 中的管道运行,你可以切换到Azure 门户并在“代理”视图中查看正在运行的代理。

清理资源

如果不打算继续使用此应用程序,请删除资源组、开发人员中心、开发人员中心项目和托管 DevOps 池。 本快速入门创建了新资源组中的所有资源,因此可以使用 az group delete 命令将其全部删除,以删除资源组及其所有资源。

az group delete -n $RESOURCE_GROUP_NAME

另请参阅