托管 DevOps 池的配置要求

管道使用 需求 来指定代理需要具备哪些功能,以便 Azure DevOps 可以将管道作业发送给该代理。

在托管 DevOps 池中,ImageOverride 的请求与 Azure Pipelines 中的请求功能相似。 管道作业将路由到具有与需求匹配的属性的特定代理。 可以使用某些要求(例如 WorkFolderPriority)在代理上配置属性。

本文介绍托管 DevOps 池中提供的需求以及如何使用它们。

工作文件夹

代理的默认工作文件夹通常位于适用于 Windows 或 Linux 的驱动器D/mnt,管道可以使用Agent.WorkFolder来引用它。 可以通过在管道中指定 WorkFolder 需求来替代此位置以更改代理启动时使用的驱动器和目录名称。

如果您有一个有状态池,其中包含一个正在运行且与需求匹配的代理 WorkFolder,您的管道作业将被发送到该代理。 如果未使用有状态池,或者没有使用该池运行的 WorkFolder代理,则会启动新代理并配置为使用指定的 WorkFolder代理。 如果不存在,则会创建指定的目录。 如果路径名称 WorkFolder 无效,则使用默认代理工作文件夹。

通过在管道部分配置 WorkFolder 需求 demands 来设置代理工作文件夹。 如果使用的是 附加数据磁盘 并希望该磁盘上的代理工作文件夹,请使用 WorkFolder 数据 磁盘上的文件夹作为代理工作目录

Windows 代理的默认工作文件夹通常位于驱动器 D上。 可以使用Agent.WorkFolder在管道中引用它。

在以下示例中,WorkFolder设置为带有字母F

pool: 
  name: fabrikam-managed-pool # Name of pool
  demands:
  - WorkFolder -equals f:\custom-work-folder

优先级

Priority 指定作业的优先级。 首先执行优先级较高的作业。 有效值为: HighMediumLow。 默认值为 Medium

Prioritydemands管道部分配置需求。

pool: 
  name: fabrikam-dev-pool # Name of pool
  demands:
  - Priority -equals Low

选择作业以按优先级顺序从队列运行。 例如,你有一个池,该池具有最大代理设置 10 ,并且已将管道配置为使用此池。 资源池已运行 10 个管道,另有 20 个管道正在排队。 如果您想运行一个优先级管道,例如发布一个紧急修补程序,通常会在 10 个正在运行的管道和 20 个排队中的管道完成后运行。 如果在将紧急管道排队时将其优先级设置为High,它会获取代理并在之前排队的20个管道之前运行。

如果多个作业同时排队,则低优先级作业可能会在优先级较高的作业之前运行。

对于具有多个作业的单个管道的情况:

  • 如果管道具有 定义顺序作业的依赖项,则无论每个作业的优先级设置如何,顺序作业都按管道指定的顺序运行。
  • 如果管道有多个作业配置为并行运行(这是 YAML 管道的默认值),作业将同时排队。 管道中优先级较低的作业可能在具有较高优先级值的作业之前运行。

ImageOverride

如果池中有多个映像,则可以将管道配置为使用特定映像。 使用 ImageOverride 需求并提供图像的 别名。 若要使用 Azure Pipelines 映像,请使用其 预定义的别名。 对于所有其他映像,必须 配置自己的别名

如果池中有多个映像,并且不使用管道中的要求来指定映像,则管道将使用池中第一个列出的映像运行。 可以通过更改fabricProfile部分中images列表中的图像顺序(如果使用模板),来更改池中的图像顺序。 还可以通过拖动来对 映像列表中的映像 在 Azure 门户中进行排序。

在以下示例中,管道配置为在配置了 ubuntu-24.04-gen2 别名的映像上运行。

pool: 
  name: fabrikam-dev-pool # Name of pool
  demands:
  - ImageOverride -equals ubuntu-24.04-gen2

重要

不要将 ImageOverride 别名的引号放在需求中,即使名称中有空格也是如此。

ImageVersionOverride

如果要使用特定版本的映像,而不是映像配置指定的版本,可以使用 ImageVersionOverride 需求。 例如,在将其提升为映像 的最新 版本之前,可以使用它来验证新的映像版本。

使用 ImageVersionOverride 来指定与 池设置中配置的版本不同的映像版本时,将根据需要使用指定的映像版本启动每个代理。 备用代理 是使用 池配置中指定的映像版本预配的。 如果使用 ImageVersionOverride,则任何备用代理都不匹配该版本,并且会启动新的代理。

ImageVersionOverridedemands管道部分配置需求。 下面的示例指定了ImageVersionOverride20250427.1.0

pool: 
  name: fabrikam-dev-pool # Name of pool
  demands:
  - ImageVersionOverride -equals 20250427.1.0

小窍门

如果认为管道由于映像更新而失败,请按照故障排除:检查是否存在映像更新中的步骤进行。

定制功能

如果您有状态池,并且希望在特定正在运行的代理实例上运行作业,您可以使用CustomCapabilities要求。 需求 CustomCapabilities 仅适用于有状态池中的代理。 使用无状态池时,将获得每个作业的全新代理映像。

在管道中指定需求时,如果以前运行过同一 CustomCapabilities 需求的任何管道,并且运行管道的有状态代理仍处于联机状态,则使用该代理来运行管道。

如果没有与需求匹配 CustomCapabilities 的联机代理,则会从池中预配代理。 它带有 CustomCapabilities 需求标记,用于运行管道。

具有相同 CustomCapabilities 需求的后续作业使用标记代理实例运行作业,前提是该代理处于联机状态。

在以下示例中,使用有状态池中的 Azure Pipelines 映像运行 windows-2022 管道。 如果一个联机代理已经准备好接受任务,并被标记为包含 CustomCapabilities 属性(由之前在该代理上运行的管道设置),那么该代理将用于运行此管道。 如果没有联机代理与此需求匹配,则使用下一个可用代理来运行作业,并使用属性标记 CustomCapabilities 代理。 如果此代理已联机并准备好运行作业,那么未来通过此需求运行的管道将会在该代理上运行。

pool: 
  name: fabrikam-dev-pool # Name of pool
  demands:
  - ImageOverride -equals windows-2022
  - CustomCapabilities -equals MyCustomValue

例如,如果你有一个大型存储库需要很长时间才能克隆,并且有多个从此存储库运行的管道,则可以在管道中使用相同的 CustomCapabilities 需求。 此需求通过使用已有存储库克隆的代理来帮助第二个管道更快地运行。