管道使用 需求 来指定代理需要具备哪些功能,以便 Azure DevOps 可以将管道作业发送给该代理。
在托管 DevOps 池中,ImageOverride 的请求与 Azure Pipelines 中的请求功能相似。 管道作业将路由到具有与需求匹配的属性的特定代理。 可以使用某些要求(例如 WorkFolder 和 Priority)在代理上配置属性。
本文介绍托管 DevOps 池中提供的需求以及如何使用它们。
WorkFolder
代理的默认工作文件夹通常是D:\a\_work(如果池的 VM 大小没有C:\a\_work驱动器,则为D)适用于 Windows 代理,对于 Linux 代理则为/mnt/vss/_work,并且可以通过Agent.WorkFolder预定义的变量在管道中引用它。 可以通过在管道中指定 WorkFolder 需求来替代此位置以更改代理启动时使用的驱动器和目录名称。
小窍门
需求 WorkFolder 在管道级别配置自定义代理工作文件夹。 若要将代理配置为对池中的每个代理使用自定义工作目录,请配置 Work 文件夹 设置。
若你有一个有状态池,其中有运行中的智能体的 WorkFolder 与你的需求匹配,你的管道作业将被发送到该智能体。 若你未使用有状态池,或无智能体以该 WorkFolder 运行,则会启动一个新智能体并将其配置为使用指定的 WorkFolder。 如果不存在,则会创建指定的目录。 如果路径名称 WorkFolder 无效,则使用默认代理工作文件夹。
通过在管道的 demands 部分配置 WorkFolder 需求来设置你的智能体工作文件夹。 如果您使用的是 附加数据磁盘,并希望将代理工作文件夹放在该磁盘上,请使用 WorkFolder,并将数据磁盘上的某个文件夹指定为代理工作目录。
Windows 代理的默认工作文件夹通常位于驱动器 D上。 可以使用Agent.WorkFolder在管道中引用它。
在以下示例中,WorkFolder 被设置为盘符为 F 的附加数据磁盘。
pool:
name: fabrikam-managed-pool # Name of pool
demands:
- WorkFolder -equals f:\custom-work-folder
优先级
Priority 指定作业的优先级。 首先执行优先级较高的作业。 有效值为: High、 Medium和 Low。 默认值为 Medium。
在管道的 demands 部分配置 Priority 需求。
pool:
name: fabrikam-dev-pool # Name of pool
demands:
- Priority -equals Low
作业按优先级顺序从队列中选中运行。 例如,你有一个池,其最大智能体设置为 10,你配置了一个管道使用此池。 该池已在运行 10 个管道,另有 20 个在队列中等待。 若你想运行一个高优先级管道,例如推送热修复,正常情况下它会在 10 个运行中的管道和 20 个排队管道完成后运行。 若在排队紧急管道时将优先级设为 High,它将获得智能体并在之前排队的 20 个管道之前运行。
如果多个作业同时排队,则低优先级作业可能会在优先级较高的作业之前运行。
对于具有多个作业的单个管道的情况:
- 如果管道具有 定义顺序作业的依赖项,则无论每个作业的优先级设置如何,顺序作业都按管道指定的顺序运行。
- 如果管道有多个作业配置为并行运行(这是 YAML 管道的默认值),作业将同时排队。 管道中优先级较低的作业可能在具有较高优先级值的作业之前运行。
ImageOverride
如果池中有多个映像,则可以将管道配置为使用特定映像。 使用 ImageOverride 需求并提供图像的 别名。 若要使用 Azure Pipelines 映像,请使用其 预定义的别名。 对于所有其他镜像,你必须配置你自己的别名。
若你的池中有多个映像,且管道中未使用需求指定映像,则管道将使用池中列出的第一个映像运行。 可以通过更改images部分中fabricProfile列表中的图像顺序(如果使用模板),来更改池中的图像顺序。 还可以通过拖动来对 映像列表中的映像 在 Azure 门户中进行排序。
在以下示例中,管道配置为在配置了 ubuntu-24.04-gen2 别名的映像上运行。
pool:
name: fabrikam-dev-pool # Name of pool
demands:
- ImageOverride -equals ubuntu-24.04-gen2
重要
即使别名名称中包含空格,也不要在 ImageOverride demand 中给它加上引号。
ImageVersionOverride
如果要使用特定版本的映像,而不是映像配置指定的版本,可以使用 ImageVersionOverride 需求。 例如,你可以用它在将新映像版本提升为最新映像之前进行验证。
使用 ImageVersionOverride 来指定与 池设置中配置的版本不同的映像版本时,将根据需要使用指定的映像版本启动每个代理。
备用代理 是使用 池配置中指定的映像版本预配的。 如果使用 ImageVersionOverride,则任何备用代理都不匹配该版本,并且会启动新的代理。
在管道的 demands 部分配置 ImageVersionOverride 需求。 以下示例指定 ImageVersionOverride 为 20250427.1.0。
pool:
name: fabrikam-dev-pool # Name of pool
demands:
- ImageVersionOverride -equals 20250427.1.0
小窍门
如果认为管道由于映像更新而失败,请按照故障排除:检查是否存在映像更新中的步骤进行。
附加的数据磁盘
若要按管道附加空数据磁盘,请配置以下要求。 有关这些要求配置的属性的详细信息,请参阅 “配置存储:附加的数据磁盘属性”。
| 需求 | Description |
|---|---|
DiskSizeGiB |
必填。 设置此要求以附加空数据磁盘。 |
Caching |
缓存类型。 省略此要求,以对所选存储类型使用默认缓存类型。 |
StorageAccountType |
省略此要求以使用默认 Standard_LRS 存储类型。 |
DriveLetter |
(仅限 Windows)省略此需求以使用你的 VM 大小的默认盘符。 如果你想使用特定盘符,请将此需求设置为你想使用的字母。 |
在以下示例中,Windows 管道指定了一个附加的空数据磁盘,其大小为 128 GB,驱动器盘符为 L。 省略缓存类型和存储类型,因此使用默认值。
pool:
name: fabrikam-managed-pool # Name of pool
demands:
- DiskSizeGiB -equals 128
- DriveLetter -equals L
CustomCapabilities
若你有有状态池,且想在特定的运行中的智能体实例上运行作业,你可以使用 CustomCapabilities 需求。
CustomCapabilities 需求仅适用于有状态池中的智能体。 使用无状态池时,每个作业都会获得全新的智能体映像。
在管道中指定需求时,如果以前运行过同一 CustomCapabilities 需求的任何管道,并且运行管道的有状态代理仍处于联机状态,则使用该代理来运行管道。
若无在线智能体匹配 CustomCapabilities 需求,将从池中预配一个智能体。 该代理会标记上 CustomCapabilities 需求,并用于运行管道。
具有相同 CustomCapabilities 需求的后续作业使用标记代理实例运行作业,前提是该代理处于联机状态。
在以下示例中,管道在有状态池中使用 windows-2022 Azure Pipelines 映像运行。 如果一个联机代理已经准备好接受任务,并被标记为包含 CustomCapabilities 属性(由之前在该代理上运行的管道设置),那么该代理将用于运行此管道。 如果没有在线代理满足此需求,则使用下一个可用代理来运行作业,并且该代理会被加上 CustomCapabilities 属性。 若该智能体在线且已准备好运行作业,未来带有此需求的管道运行将在此智能体上执行。
pool:
name: fabrikam-dev-pool # Name of pool
demands:
- ImageOverride -equals windows-2022
- CustomCapabilities -equals MyCustomValue
例如,如果你有一个大型存储库需要很长时间才能克隆,并且有多个从此存储库运行的管道,则可以在管道中使用相同的 CustomCapabilities 需求。 此需求通过复用已克隆仓库的智能体,帮助第二个管道更快运行。