需求

需求为管道提供了一种方法,用于指定代理中必须提供的功能,以便 Azure DevOps 将作业从管道发送到代理。 在托管 DevOps 池中,ImageOverride 等需求与 Azure Pipelines 中的需求一样工作,其中管道作业将路由到具有与需求匹配的属性的特定代理,但某些需求(如 WorkFolderPriority)可用于在代理上配置属性。 本文介绍托管 DevOps 池中提供的需求以及如何使用它们。

工作文件夹

代理的默认工作文件夹通常位于适用于 Windows 或 /mnt for Linux 的 D:\ 驱动器上,可以使用预定义的变量在管道Agent.WorkFolder中引用。 可以通过在管道中指定 WorkFolder 需求来替代此位置以更改启动代理时使用的驱动器和目录名称。 如果具有与需求匹配的正在运行的代理 WorkFolder 的有状态池,管道将发送到该代理。 如果未使用有状态池,或者没有使用该池运行的 WorkFolder代理,则会启动新代理并将其配置为使用指定的 WorkFolder代理。 如果不存在,则会创建指定的目录。 如果路径名称 WorkFolder 无效,则使用默认代理工作文件夹。

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

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

在以下示例中,WorkFolder设置为已分配字母F

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

优先级

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

Prioritydemands管道部分配置需求。

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

选择作业以按优先级顺序从队列运行。 例如,你有一个池,其最大代理设置为 10,管道配置为使用此池。 池已运行 10 个管道,20 个管道已排队。 如果有要运行的优先级管道(例如推送热修补程序),则通常在 10 个正在运行的管道和 20 个排队管道完成后运行。 如果在排队修补程序管道时将优先级设置为高,则会在 20 个以前排队的管道之前获取代理并运行。

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

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

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

ImageOverride

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

重要

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

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

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

重要

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

ImageVersionOverride

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

重要

当使用 ImageVersionOverride 指定与在池设置中配置的版本不同的映像版本时,每个代理将按需使用指定的映像版本启动。

备用代理 是使用 池配置中指定的映像版本预配的,因此如果使用 ImageVersionOverride,备用代理将不会匹配该版本,从而启动新的代理。

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

pool: 
  name: fabrikam-dev-pool # Name of Managed DevOps 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 Managed DevOps Pool
  demands:
  - ImageOverride -equals windows-2022
  - CustomCapabilities -equals MyCustomValue

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

另请参阅