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

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

先决条件

在完成本文中的步骤之前,请根据 先决条件 一文中描述的方法,配置您的 Azure 订阅和 Azure DevOps 组织,以便与托管 DevOps 资源池一起使用。 每个 Azure 订阅和 Azure DevOps 组织只需完成一次这些步骤。

在 Azure Cloud Shell 中安装或运行

了解如何使用 Azure CLI 的最简单方法是通过浏览器在 Azure Cloud Shell运行 Bash 环境。 若要了解 Cloud Shell,请参阅 Azure Cloud Shell 中的 Bash 快速入门

准备好安装 Azure CLI 后,请参阅 Windows、Linux、macOS 和 Docker 容器的安装说明

通过运行 az --version来检查版本。 Azure Cloud Shell 始终预安装了最新版本的 Azure CLI。

az version

登录 Azure CLI

打开命令提示符(在 Windows 上,使用 Windows 命令提示符或 PowerShell),并运行以下命令。 如果使用 Azure Cloud Shell ,则无需运行 az login ,除非要使用其他帐户。

  1. 登录到 Azure CLI。

    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 RANDOM_ID="$(openssl rand -hex 3)"
    export RESOURCE_GROUP_NAME="myManagedDevOpsPoolGroup$RANDOM_ID"
    export REGION=EastUS2
    export POOL_NAME="mdpPool$RANDOM_ID"
    export DEV_CENTER_NAME="mdpDevCenter$RANDOM_ID"
    export DEV_CENTER_PROJECT_NAME="mdpDevCenterProject$RANDOM_ID"
    
  2. 运行以下命令以查看资源名称。

    echo $RESOURCE_GROUP_NAME
    echo $POOL_NAME
    echo $DEV_CENTER_NAME
    echo $DEV_CENTER_PROJECT_NAME
    echo $REGION
    

创建资源组

  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-22.04"
            ],
            "buffer": "*",
            "wellKnownImageName": "ubuntu-22.04/latest"
          }
        ],
        "osProfile": {
          "secretsManagementSettings": {
            "observedCertificates": [],
            "keyExportable": false
          },
          "logonType": "Service"
        },
        "storageProfile": {
          "osDiskStorageAccountType": "Standard",
          "dataDisks": []
        }
      }
    }
    

    此配置使用Standard_D2as_v5映像、ubuntu-22.04 Azure 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. 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-pools托管 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

另请参阅