快速入门:使用 Bicep 模板创建托管 DevOps 池

本文介绍如何使用 Bicep 模板创建托管 DevOps 池,以及如何在新池中运行管道。

先决条件

在完成本文中的步骤之前,请确保已按照先决条件一文中的说明配置了 Azure 订阅和 Azure DevOps 组织,以便搭配使用托管 DevOps 池。 每个 Azure 订阅和 Azure DevOps 组织只需完成一次这些步骤。

登录 Azure CLI

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

  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. 创建资源组以包含托管 DevOps 池和其他资源。 替换为 <resourceGroupName> 要用于资源组的名称以及 <location> 要在其中创建资源组的 Azure 区域。

    az group create --name <resourceGroupName> --location <location>
    

查看并保存模板

  1. 创建包含以下内容的本地文件名 mdp-azure-deploy.bicep 。 此文件是参数化的 Bicep 模板,用于创建资源 Microsoft.DevOpsInfrastructure/pools ,包括依赖项 Microsoft.DevCenter/devcenters 资源和 Microsoft.DevCenter/projects 资源。

    @minLength(3)
    @maxLength(44)
    param poolName string
    
    @maxLength(26)
    param devCenterName string
    
    param devCenterProjectName string
    param adoOrg string
    param imageName string
    param poolSize int
    param location string = 'eastus'
    
    resource devCenter 'Microsoft.DevCenter/devcenters@2025-02-01' = {
      name: devCenterName
      location: location
    }
    
    resource devCenterProject 'Microsoft.DevCenter/projects@2025-02-01' = {
      name: devCenterProjectName
      location: location
      properties: {
        devCenterId: devCenter.id
      }
    }
    
    resource pool 'microsoft.devopsinfrastructure/pools@2025-01-21' = {
      name: poolName
      location: location
      properties: {
        organizationProfile: {
          organizations: [
            {
              url: adoOrg
              parallelism: 1
            }
          ]
          permissionProfile: {
            kind: 'CreatorOnly'
          }
          kind: 'AzureDevOps'
        }
        devCenterProjectResourceId: devCenterProject.id
        maximumConcurrency: poolSize
        agentProfile: {
          kind: 'Stateless'
        }
        fabricProfile: {
          sku: {
            name: 'Standard_D2ads_v5'
          }
          images: [
            {
              wellKnownImageName: imageName
              buffer: '*'
            }
          ]
          kind: 'Vmss'
        }
      }
    }
    
  2. 创建另一个名为 mdp-azure-deploy-parameters.bicepparam 的本地文件,并将其保存在与第一个文件相同的文件夹中。 更新以下属性以匹配环境的详细信息。

    参数 价值
    poolName 使用池的所需名称进行更新 value 。 该名称必须包含字母数字字符、.-_字母数字字符,长度介于 3 到 44 个字符之间。 该名称在 Azure 中必须全局唯一。
    devCenterName 使用开发人员中心所需的名称进行更新 value
    devCenterProjectName 使用开发人员中心项目所需的名称进行更新 value
    adoOrg 更新 value 并替换为 your-organization Azure DevOps 组织的名称。
    imageName 此示例配置为使用 Azure Pipelines 映像,并使用 Windows Server 2022 映像。 如果要更改它,请从 Azure Pipelines 映像预定义别名中进行选择。 托管 DevOps 池还支持 Azure 计算库映像和选定的市场映像。 有关为这些映像类型配置托管 DevOps 池资源的信息,请参阅 “配置托管 DevOps 池”映像
    poolSize 使用想要能够运行并发作业的最大代理数进行更新 value 。 在此示例中,is poolSize .1
    location 池的 Azure 区域。 在此示例中,区域为 eastus.
    using './mdp-azure-deploy.bicep'
    
    param poolName = '<pool-name>'
    param devCenterName = '<dev-center-name>'
    param devCenterProjectName = '<dev-center-project-name>'
    param adoOrg = 'https://dev.azure.com/fabrikam'
    param location = 'eastus'
    param imageName = 'windows-2022'
    param poolSize = 1
    

创建托管 DevOps 池

打开命令提示符(在 Windows 上,使用 Windows 命令提示符或 PowerShell),并运行以下命令。 如果第一个过程中的 Azure CLI 会话仍然处于活动状态,则可以跳过前两个命令。

  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 订阅。

  3. 保存上一步中的 mdp-azure-deploy.bicepmdp-azure-deploy-parameters.bicepparam 文件时,请转到该文件夹。 在此示例中,文件将保存到 C:\examples

    cd c:\examples
    
  4. 创建托管 DevOps 池。 替换为 <resourceGroupName> 在第一步中创建的资源组。

    az deployment group create --resource-group <resourceGroupName> --template-file mdp-azure-deploy.bicep --parameters mdp-azure-deploy-parameters.bicepparam
    

    如果订阅没有容量使用所需的 Azure VM SKU 和最大代理计数配置池,则池创建失败,并出现类似于以下消息的错误。 Cores needed to complete this request is 8, 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 池。

在 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 池、开发人员中心和 开发人员中心 Project,可以通过删除包含它们的资源组来删除它们

另请参阅