托管 DevOps 池提供了多个用于在池中运行管道的虚拟机映像选项。 可以使用所选Azure 市场 VM 映像创建池,使用自己的自定义 Azure 计算库映像,或使用与 Azure Pipelines Microsoft托管代理相同的映像。
可以使用单个映像或多个映像配置托管 DevOps 池。 当池具有多个映像时,管道会指定要使用 别名运行的映像。
选择池的映像
创建托管 DevOps 池时会选择默认映像。 可以保留默认选项,也可以在创建池期间更改它。 若要在创建池后配置映像,请转到“设置>池”,从映像库中选择“添加”,然后为池选择一个或多个映像。
映像是在 fabricProfile
托管 DevOps 池资源属性的部分中配置的。
以下示例指定三个图像。 有关映像架构的详细信息,请参阅本文中的以下部分。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "fabrikam-managed-pool",
"type": "microsoft.devopsinfrastructure/pools",
"apiVersion": "2024-10-19",
"location": "eastus",
"properties": {
...
"fabricProfile": {
...
"images": [
{
"resourceId": "/subscriptions/subscription_id_placeholder/Providers/Microsoft.Compute/Locations/eastus/publishers/canonical/artifacttypes/vmimage/offers/0001-com-ubuntu-server-focal/skus/20_04-lts-gen2/versions/latest",
"aliases": [
"ubuntu-20.04-gen2"
]
},
{
"wellKnownImageName": "windows-2022"
},
{
"wellKnownImageName": "ubuntu-22.04"
}
]
}
}
}
]
}
每个图像可以具有以下属性。
properties |
说明 |
aliases |
别名的可选列表。 然后,可以使用别名而不是映像的完整资源 ID 来引用映像。 |
resourceID |
要使用的映像的资源 ID。 使用 Azure 计算库映像 或 所选市场映像时是必需的。 |
wellKnownImageName |
Azure Pipelines 映像的别名。 使用 Azure Pipelines 映像时是必需的。 |
buffer |
启用备用代理后,buffer 指定要分配给此映像的备用代理的百分比。 所有图像 buffer 值的总数必须等于 100。 |
以下示例定义三个图像。 已启用备用代理,其中 100% 的备用代理分配给 windows-2022
映像。
"images": [
{
"resourceId": "/subscriptions/subscription_id_placeholder/Providers/Microsoft.Compute/Locations/eastus/publishers/canonical/artifacttypes/vmimage/offers/0001-com-ubuntu-server-focal/skus/20_04-lts-gen2/versions/latest",
"aliases": [
"ubuntu-20.04-gen2"
],
"buffer": "0"
},
{
"buffer": "100",
"wellKnownImageName": "windows-2022"
},
{
"buffer": "0",
"wellKnownImageName": "ubuntu-22.04"
}
]
映像是在 fabric-profile
托管 DevOps 池资源属性的部分中配置的。
az mdp pool create \
--fabric-profile fabric-profile.json
# other parameters omitted for space
下面的示例演示images
fabric-profile.json文件的节,并指定三个图像。 有关映像架构的详细信息,请参阅本文中的以下部分。
{
"vmss": {
"sku": {...},
"images": [
{
"resourceId": "/subscriptions/subscription_id_placeholder/Providers/Microsoft.Compute/Locations/eastus/publishers/canonical/artifacttypes/vmimage/offers/0001-com-ubuntu-server-focal/skus/20_04-lts-gen2/versions/latest",
"aliases": [
"ubuntu-20.04-gen2"
],
"buffer": "0"
},
{
"buffer": "100",
"wellKnownImageName": "windows-2022"
},
{
"buffer": "0",
"wellKnownImageName": "ubuntu-22.04"
}
],
"osProfile": {...},
"storageProfile": {...}
}
}
每个图像可以具有以下属性。
properties |
说明 |
aliases |
别名的可选列表。 然后,可以使用别名而不是映像的完整资源 ID 来引用映像。 |
resourceID |
要使用的映像的资源 ID。 使用 Azure 计算库映像 或 所选市场映像时是必需的。 |
wellKnownImageName |
Azure Pipelines 映像的别名。 使用 Azure Pipelines 映像时是必需的。 |
buffer |
启用备用代理后,buffer 指定要分配给此映像的备用代理的百分比。 所有图像 buffer 值的总数必须等于 100。 |
以下示例定义三个图像。 已启用备用代理,其中 100% 的备用代理分配给 windows-2022
映像。
{
"vmss": {
"sku": {...},
"images": [
{
"resourceId": "/subscriptions/subscription_id_placeholder/Providers/Microsoft.Compute/Locations/eastus/publishers/canonical/artifacttypes/vmimage/offers/0001-com-ubuntu-server-focal/skus/20_04-lts-gen2/versions/latest",
"aliases": [
"ubuntu-20.04-gen2"
],
"buffer": "0"
},
{
"buffer": "100",
"wellKnownImageName": "windows-2022"
},
{
"buffer": "0",
"wellKnownImageName": "ubuntu-22.04"
}
],
"osProfile": {...},
"storageProfile": {...}
}
}
如果选择单个映像,则池中的所有管道都使用该映像。 如果选择多个映像,则可以指定按管道使用的映像。 有关详细信息,请参阅 每个池使用多个映像。
可以从以下类型的图像中进行选择。
Azure Pipelines 映像
托管 DevOps 池提供了多个预配置映像,这些映像与 Azure Pipelines 的所选Microsoft托管代理具有相同的软件。
每个映像都包含以下已安装的软件。
映像 |
包含的软件 |
Azure Pipelines - Windows Server 2022 |
包含的软件 |
Azure Pipelines - Windows Server 2019 |
包含的软件 |
Azure Pipelines - Ubuntu 22.04 |
包含的软件 |
Azure Pipelines - Ubuntu 20.04 |
包含的软件 |
所选市场映像
托管 DevOps 池提供一组特选Microsoft已发布Azure 市场 VM 映像,以便在池中使用。
选择 “所选市场映像”,选择所需的映像,然后选择所需的版本。 选择 最新版本 以始终使用最新版本的映像。
若要指定选定的市场映像,请使用 resourceId
该属性提供映像的资源 ID。
"images": [
{
"resourceId": "/subscriptions/subscription_id_placeholder/Providers/Microsoft.Compute/Locations/eastus/publishers/canonical/artifacttypes/vmimage/offers/0001-com-ubuntu-server-focal/skus/20_04-lts-gen2/versions/latest"
}
]
若要指定选定的市场映像,请使用 resourceId
属性提供映像的资源 ID。
"images": [
{
"resourceId": "/subscriptions/subscription_id_placeholder/Providers/Microsoft.Compute/Locations/eastus/publishers/canonical/artifacttypes/vmimage/offers/0001-com-ubuntu-server-focal/skus/20_04-lts-gen2/versions/latest"
}
]
Azure 计算库映像
选择 Azure 计算库映像 以指定订阅中提供的任何 Azure 计算库中的映像。 支持以下操作系统的通用 映像。
- Windows Server 2019
- Windows Server 2022
- Windows 11
- Ubuntu 20.04
- Ubuntu 22.04
- Ubuntu 24.04
- Debian 9
- RHEL 8
- RHEL 9
- SUSE 12
- SUSE 15
若要指定 Azure 计算库映像,请使用该 resourceId
属性提供映像的资源 ID。
"images": [
{
"resourceId": "/subscriptions/subscription_id_placeholder/Providers/Microsoft.Compute/Locations/eastus/publishers/canonical/artifacttypes/vmimage/offers/0001-com-ubuntu-server-focal/skus/20_04-lts-gen2/versions/latest"
}
]
若要指定选定的市场映像,请使用 resourceId
属性提供映像的资源 ID。
"images": [
{
"resourceId": "/subscriptions/subscription_id_placeholder/Providers/Microsoft.Compute/Locations/eastus/publishers/canonical/artifacttypes/vmimage/offers/0001-com-ubuntu-server-focal/skus/20_04-lts-gen2/versions/latest"
}
]
授予读者角色对 DevOpsInfrastructure 服务主体的访问权限
重要
将读取者角色分配给要使用的 Azure 计算库映像的 DevOpsInfrastructure 服务主体。 如果选择未配置此访问权限的 Azure 计算库映像,池创建会失败。 可以在映像级别或库中所有映像的映像库级别单独分配“读取者”角色。
转到Azure 门户中所需的资源。 若要能够使用库中的所有映像,请转到Azure 门户中的 Azure 计算库。 若要仅使用特定映像,请转到该映像。
选择“访问控制 (IAM)”。
选择“添加”>“添加角色分配”,打开“添加角色分配”页面。
分配以下角色。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色。
设置 |
值 |
角色 |
读者 |
将访问权限分配到 |
服务主体 |
成员 |
DevOpsInfrastructure |
将每个池的多个映像与别名一起使用
如果池中有多个映像,可以通过引用该映像的别名来配置 Azure DevOps 管道以使用特定映像。
若要添加和管理映像别名,请转到 池设置的“映像 ”部分,然后选择 ..., 添加别名。
将任何所需别名添加到 别名 列表,然后选择“ 保存”。
以下示例显示了一个池,其中包含两个 Azure Pipelines 映像和一个选定的市场映像。 Azure Pipeline 映像显示其默认别名,所选市场映像具有名为 ubuntu-20.04-gen2 的单个配置别名。
若要配置别名,请在 aliases
列表中指定别名。 以下示例定义一个名为 ubuntu-20.04-gen2
的别名的图像。
"images": [
{
"resourceId": "/subscriptions/subscription_id_placeholder/Providers/Microsoft.Compute/Locations/eastus/publishers/canonical/artifacttypes/vmimage/offers/0001-com-ubuntu-server-focal/skus/20_04-lts-gen2/versions/latest",
"aliases": [
"ubuntu-20.04-gen2"
]
}
]
若要配置别名,请在 aliases
列表中指定别名。 以下示例定义一个名为 ubuntu-20.04-gen2
的别名的图像。
"images": [
{
"resourceId": "/subscriptions/subscription_id_placeholder/Providers/Microsoft.Compute/Locations/eastus/publishers/canonical/artifacttypes/vmimage/offers/0001-com-ubuntu-server-focal/skus/20_04-lts-gen2/versions/latest",
"aliases": [
"ubuntu-20.04-gen2"
]
}
]
Azure Pipelines 映像预定义别名
除了配置的任何别名之外,Azure Pipelines 映像还具有以下预定义别名。
Azure Pipelines 映像 |
预定义别名 |
Azure Pipelines - Windows Server 2022 |
windows-2022 |
Azure Pipelines - Windows Server 2019 |
windows-2019 |
Azure Pipelines - Ubuntu 22.04 |
ubuntu-22.04 |
Azure Pipelines - Ubuntu 20.04 |
ubuntu-20.04 |
使用要求指定图像
如果池中有多个映像,则可以使用命名ImageOverride
的需求将管道配置为在特定映像上运行。 在管道中指定 ImageOverride
需求时,托管 DevOps 池仅使用该映像将作业发送到代理。
若要在具有 ubuntu-20.04-gen2
别名的上一个示例中的 Ubuntu 20.04 映像上运行管道,请在管道部分指定以下需求 pool
。
pool:
name: fabrikam-dev-pool # Name of Managed DevOps Pool
demands:
- ImageOverride -equals ubuntu-20.04-gen2
重要
不要将 ImageOverride
别名的引号放在需求中,即使名称中有空格也是如此。
若要在池中使用 Azure Pipelines 映像运行管道,请使用上表中的别名。 若要在上一示例中的 Azure Pipelines Windows Server 2022 映像上运行管道,请在管道部分指定以下需求 pool
。
pool:
name: fabrikam-dev-pool # Name of Managed DevOps Pool
demands:
- ImageOverride -equals windows-2022
另请参阅