需求
需求为管道提供了一种方法,用于指定代理中必须提供的功能,以便 Azure DevOps 将作业从管道发送到代理。 在托管 DevOps 池中,ImageOverride 等需求与 Azure Pipelines 中的需求一样工作,其中管道作业将路由到具有与需求匹配的属性的特定代理,但某些需求(如 WorkFolder 和 Priority)可用于在代理上配置属性。 本文介绍托管 DevOps 池中提供的需求以及如何使用它们。
WorkFolder
代理的默认工作文件夹通常位于适用于 Windows 或 /mnt for Linux 的 D:\ 驱动器上,可以使用预定义的变量在管道Agent.WorkFolder
中引用。 可以通过在管道中指定 WorkFolder
需求来替代此位置以更改启动代理时使用的驱动器和目录名称。 如果具有与需求匹配的正在运行的代理 WorkFolder
的有状态池,管道将发送到该代理。 如果未使用有状态池,或者没有使用该池运行的 WorkFolder
代理,则会启动新代理并将其配置为使用指定的 WorkFolder
代理。 如果不存在,则会创建指定的目录。 如果路径名称 WorkFolder
无效,则使用默认代理工作文件夹。
配置 WorkFolder
管道部分中的需求 demands
以设置代理工作文件夹。 如果使用的是 附加数据磁盘 并希望该磁盘上的代理工作文件夹,请使用 WorkFolder
数据 磁盘上的文件夹作为代理工作目录。
pool:
name: fabrikam-managed-pool # Name of Managed DevOps Pool
demands:
- WorkFolder -equals c:\custom-work-folder # Windows agent example
# Use a folder like /user/local/custom-work-folder for Linux
# or /mnt/storage/sdc/custom-work-folder if you're using a data disk.
优先级
Priority
指定作业的优先级。 首先执行优先级较高的作业。 有效值为:High
、、Medium
Low
. 默认值为 Medium
。
在Priority
demands
管道部分配置需求。
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 映像,可以使用其 预定义的别名。 对于所有其他映像,必须 配置自己的别名。
在以下示例中,管道配置为使用配置 ubuntu-20.04-gen2
了别名的映像运行。
pool:
name: fabrikam-dev-pool # Name of Managed DevOps Pool
demands:
- ImageOverride -equals ubuntu-20.04-gen2
重要
不要将 ImageOverride
别名的引号放在需求中,即使名称中有空格也是如此。
ImageVersionOverride
如果使用共享映像库或Azure 市场映像,并且想要使用特定版本的映像,而不是映像配置指定的版本,则可以使用ImageVersionOverride
需求。 例如,可以使用它来验证新的映像版本,然后再将其提升为 映像的最新 版本。 以下示例指定了一个 ImageVersionOverride
.2.0.0
在ImageVersionOverride
demands
管道部分配置需求。
pool:
name: fabrikam-dev-pool # Name of Managed DevOps Pool
demands:
- ImageVersionOverride -equals 2.0.0
CustomCapabilities
如果你有有状态池,并且想要在特定的正在运行的代理实例上运行作业,则可以使用 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
需求可以帮助第二个管道更快地运行,方法是将代理与已克隆的存储库配合使用。