创建和管理代理池

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

代理池是代理的集合。 可在代理池中组织代理,而无需单独管理每个代理。 配置代理时,该代理会注册到单个池,创建管道时,需指定运行管道的池。 当你运行管道时,管道将在满足管道需求的池中的代理上运行。

在 Azure Pipelines 中,池的作用域限定为整个组织,以便你可以在项目之间共享代理计算机。

在 Azure DevOps Server 中,代理池的作用域限定为整个服务器;因此你可以跨项目和集合共享代理计算机。

注意

代理池作业在单个代理上运行作业。 如果需要在所有代理上运行作业(例如经典发布管道的部署组),请参阅预配部署组

如果你是组织管理员,可通过管理员设置中的“代理池”选项卡创建和管理代理池。

  1. (https://dev.azure.com/{yourorganization}) 登录到组织。

  2. 选择“Azure DevOps”、“组织设置”。

    选择组织设置。

  3. 选择“代理池”。

    “选择代理池”选项卡。

  1. 登录到项目集合 (http://your-server/DefaultCollection)。

  2. 选择“Azure DevOps”、“集合设置”。

    修改集合设置。

  3. 选择“代理池”。

    选择代理池。

  1. 选择“Azure DevOps”、“集合设置”。

    集合设置,2019。

  2. 选择“代理池”。

    选择“代理池,2019”。

如果你是项目团队成员,可通过项目设置中的代理池选项卡创建和管理代理池。

导航到项目并依次选择“项目设置”、“代理池”。

导航到项目并依次选择“项目设置”、“代理池”。

导航到项目并依次选择“项目设置”、“代理池”。

导航到项目并选择“项目设置”、“代理池 (2020)”。

导航到项目并依次选择“项目设置”、“代理池”。

导航到项目并选择“项目设置”、“代理池 (2019)”。

默认代理池

默认情况下提供以下代理池:

  • 具有各种 Windows、Linux 和 macOS 映像的 Azure Pipelines 托管池。 有关可用映像及其已安装软件的完整列表,请参阅 Microsoft 托管的代理

    注意

    Azure Pipelines 托管池替换了以前的托管池,这些池的名称映射到相应的映像。 以前的托管池中的任何作业都会自动重定向到新的 Azure Pipelines 托管池中的正确映像。 在某些情况下,可能仍会看到旧池名称,但在后台,托管作业是使用 Azure Pipelines 池运行的。 有关详细信息,请参阅 2019 年 7 月 1 日 - Sprint 154 发行说明中的单托管池发行说明。

默认情况下,项目中的所有参与者都是托管池上“用户”角色的成员。 这样,项目中的每个参与者都可以使用 Microsoft 托管的代理创作和运行管道。

在管道中指定池

要从 Azure DevOps 服务 YAML 管道中的 Azure 管道池中选择 Microsoft 托管的代理,请使用表中的 YAML VM 映像标签指定映像的名称。

pool:
  vmImage: ubuntu-latest # This is the default if you don't specify a pool or vmImage.

使用无任何需求的专用池:

pool: MyPool

有关详细信息,请参阅YAML 架构

管理池和队列

如果你是组织管理员,可通过管理员设置中的“代理池”选项卡创建和管理代理池。

  1. (https://dev.azure.com/{yourorganization}) 登录到组织。

  2. 选择“Azure DevOps”、“组织设置”。

    选择组织设置。

  3. 选择“代理池”。

    “选择代理池”选项卡。

  1. 登录到项目集合 (http://your-server/DefaultCollection)。

  2. 选择“Azure DevOps”、“集合设置”。

    修改集合设置。

  3. 选择“代理池”。

    选择代理池。

  1. 选择“Azure DevOps”、“集合设置”。

    集合设置,2019。

  2. 选择“代理池”。

    选择“代理池,2019”。

如果你是项目团队成员,可通过项目设置中的代理池选项卡创建和管理代理池。

导航到项目并依次选择“项目设置”、“代理池”。

导航到项目并依次选择“项目设置”、“代理池”。

导航到项目并依次选择“项目设置”、“代理池”。

导航到项目并选择“项目设置”、“代理池 (2020)”。

导航到项目并依次选择“项目设置”、“代理池”。

导航到项目并选择“项目设置”、“代理池 (2019)”。

池用于运行作业。 了解如何为作业指定池

如果你有许多用于不同团队或用途的自托管代理,你可能需要创建额外的池,如下所述。

创建代理池

下面是可能需要创建自托管代理池的一些典型情况:

  • 你是项目的成员,并且想要使用团队拥有的一组计算机来运行生成和部署作业。 首先,通过在项目设置的代理池页上选择安全性,确保你有权在项目中创建池。 必须具有管理员角色才能创建新池。 接下来,选择添加池,然后选择用于创建池的选项。 最后,安装和配置代理,以成为该代理池的一部分。

  • 你是基础结构团队的成员,希望设置一个代理池以用于所有项目。 首先,通过在组织设置的代理池页上选择安全性,确保你有权在项目中创建池。 接下来,创建一个新的代理池,并选择在创建池时在所有项目中自动预配此代理池选项。 此设置可确保所有项目都有权访问此代理池。 最后,安装和配置代理,以成为该代理池的一部分。

  • 你想要将一组代理计算机与多个项目共享,但并非与所有项目共享。 首先,导航到其中一个项目的设置,添加代理池,然后选择在组织级别创建新池的选项。 接下来,转到每个其他项目,在每个项目中创建一个池,同时选择“使用组织中的现有代理池”选项。 最后,安装代理并将其配置为共享代理池的一部分。

  • 你是项目的成员,并且想要使用团队拥有的一组计算机来运行生成和部署作业。 首先,通过在项目设置的代理池页上选择安全性,确保你有权在项目中创建池。 必须具有管理员角色才能创建新池。 接下来,选择添加池,然后选择用于创建池的选项。 最后,安装和配置代理,以成为该代理池的一部分。

  • 你是基础结构团队的成员,希望设置一个代理池以用于所有项目。 首先,通过在项目集合设置的代理池页上选择安全性,确保你有权在项目中创建池。 接下来,创建一个新的代理池,并选择在创建池时在所有项目中自动预配此代理池选项。 此设置可确保所有项目都有权访问此代理池。 最后,安装和配置代理,以成为该代理池的一部分。

  • 你想要将一组代理计算机与多个项目共享,但并非与所有项目共享。 首先,导航到其中一个项目的设置,添加代理池,然后选择在组织级别创建新池的选项。 接下来,转到每个其他项目,在每个项目中创建一个池,同时选择“使用组织中的现有代理池”选项。 最后,安装代理并将其配置为共享代理池的一部分。

  • 你是项目的成员,并且想要使用团队拥有的一组计算机来运行生成和部署作业。 首先,请确保你是“所有池”中具有管理员角色的组的成员。 接下来,在项目设置中创建新的项目代理池,然后选择“创建新的组织代理池”选项。 因此,将同时创建组织和项目级代理池。 最后,安装和配置代理,以成为该代理池的一部分。

  • 你是基础结构团队的成员,希望设置一个代理池以用于所有项目。 首先,请确保你是“所有池”中具有管理员角色的组的成员。 接下来,在管理员设置中创建新的组织代理池,在创建池时在所有项目中选择“自动预配相应的项目代理池”选项。 此设置确保所有项目都有指向组织代理池的池。 系统会为现有项目创建一个池,将来每当创建新项目时,系统就会创建一个池。 最后,安装和配置代理,以成为该代理池的一部分。

  • 你想要将一组代理计算机与多个项目共享,但并非与所有项目共享。 首先,在某个项目中创建项目代理池,并在创建池时选择“创建新组织代理池”。 接下来,转到每个其他项目,在每个项目中创建一个池,同时选择"使用现有组织代理池"选项。 最后,安装代理并将其配置为共享代理池的一部分。

代理池的安全性

了解代理池的安全性的工作原理有助于控制代理的共享和使用。

角色在每个代理池上定义,这些角色的成员身份控制你可以在代理池上执行的操作。

组织级别安全设置

组织设置中代理池中的角色 用途
读者 此角色的成员可以查看组织代理池以及代理。 通常使用此角色来添加负责监视代理及其运行状况的操作员。
服务帐户 此角色的成员可以使用组织代理池在项目中创建项目代理池。 如果你根据上述指南创建新的项目代理池,则通常不必在此处添加任何成员。
管理员 除了上述所有权限之外,此角色的成员还可以在组织代理池中注册或取消注册代理。 在项目中创建项目代理池时,这些成员还可以引用组织代理池。 最后,他们还可以管理所有组织代理池角色的成员身份。 创建组织代理池的用户会自动添加到该池的管理员角色。

“代理池”选项卡中的“所有代理池”节点用于控制所有“组织”代理池的安全性。 各个“组织”代理池的角色成员身份会自动从“所有代理池”节点继承。 默认情况下,使用 TFS 或 Azure DevOps Server 时,TFS 和 Azure DevOps Server 管理员也是“所有代理池”节点的管理员。

项目级安全设置

还会在每个项目代理池上定义角色,这些角色的成员身份控制你在项目级别能够对代理池执行的操作。

项目设置中代理池的角色 用途
读者 此角色的成员可以查看项目代理池。 通常用来添加操作员,其负责监视该项目代理池中的生成和部署作业。
用户 此角色的成员可以在创作管道时使用项目代理池。
管理员 除了上述所有操作之外,此角色的成员还可以管理所有项目代理池角色的成员身份。 创建池的用户会自动添加到该池的管理员角色。

管道权限

管道权限控制哪些 YAML 管道有权使用代理池。 管道权限不限制从经典管道进行访问。

可从以下选项中进行选择:

  • 打开所有管道的访问权限,以便从代理池的“安全性”选项卡的“管道权限”部分右上角的更多选项使用代理池。

  • 锁定代理池,仅允许选定的 YAML 管道使用它。 如果任何其他 YAML 管道引用代理池,则会引发授权请求,该请求必须由代理池管理员批准。 这不会限制从经典管道进行访问。

代理池的管道权限用户体验的屏幕截图。

无法配置 Azure Pipelines 代理池的管道权限,因为默认情况下,所有管道都可以访问该池。

“代理池”选项卡中的“所有代理池”节点用于项目中所有“项目”代理池的安全性。 单个“项目”代理池的角色成员身份会自动从“所有代理池”节点继承。 默认情况下,以下组将添加到“所有代理池”的管理员角色:生成管理员、发布管理员、项目管理员。

“代理池”选项卡中的“安全性”操作用于控制项目中所有项目代理池的安全性。 单个项目代理池的角色成员资格会自动从此处定义的内容继承。 默认情况下,以下组将添加到“所有代理池”的管理员角色:生成管理员、发布管理员、项目管理员。

常见问题解答

如果不计划维护时段,代理何时运行维护?

如果未计划任何时段,则该池中的代理将不会运行维护作业。

什么是维护作业?

可以将代理池配置为定期清理过时的工作目录和存储库。 这应该会降低代理耗尽磁盘空间的可能性。 在代理池设置中在组织级别配置维护作业。

配置维护作业设置:

  1. (https://dev.azure.com/{yourorganization}) 登录到组织。

  2. 选择“Azure DevOps”、“组织设置”。

    选择组织设置。

  3. 选择“代理池”。

    “选择代理池”选项卡。

  1. 登录到项目集合 (http://your-server/DefaultCollection)。

  2. 选择“Azure DevOps”、“集合设置”。

    修改集合设置。

  3. 选择“代理池”。

    选择代理池。

  1. 选择“Azure DevOps”、“集合设置”。

    集合设置,2019。

  2. 选择“代理池”。

    选择“代理池,2019”。

选择所需的池,然后选择“设置”,为该代理池配置维护作业设置。

重要

必须具有“管理生成队列”权限才能配置维护作业设置。 如果未看到“设置”选项卡或“维护历史记录”选项卡,则表示你没有该权限,因为默认情况下这两个选项卡将被授予“管理员”角色。 有关详细信息,请参阅代理池的安全性

维护作业设置

配置所需的设置,然后选择“保存”。

选择“维护历史记录”以查看当前代理池的维护作业历史记录。 可以下载并查看日志,以查看清理步骤和采取的操作。

维护作业历史记录

维护是由每个代理池(而不是每台计算机)完成的,因此,如果一台计算机上有多个代理,仍然会遇到磁盘空间的问题。

自托管代理池的维护作业看起来卡住了。 为什么?

典型情况是,当维护作业等待在不再存在于代理池中的代理上运行时会“卡住”。 例如,当代理被有意下线或和它的通信出现问题时,就会发生这种情况。

已排队等待运行的维护作业将等待 7 天才能运行。 之后,如果不运行,它们将自动设置为失败状态。 此时间限制无法更改。

七天限制不同于 维护作业超时 设置。 后者控制代理可以花费的最大维护分钟数。 计时器在作业开始时启动,而不是当作业在代理上排队时启动。

我尝试创建一个使用现有组织代理池的项目代理池,但控件已灰显。为什么?

如果现有组织代理池已被另一个项目代理池引用,则无法在“创建项目代理池”对话框中使用该池。 在一个给定的项目集合中,每个组织代理池只能由一个项目代理池引用。

我无法选择 Microsoft 托管的池,且无法将我的版本排队。 如何修复此问题?

要求 Azure DevOps 组织的所有者授予你使用池的权限。 请参阅代理池的安全性

我需要更多托管生成资源。 我该怎么办?

答:Azure Pipelines 池每月为所有 Azure DevOps 组织提供云托管的生成代理和免费生成分钟数。 如果需要更多 Microsoft 托管的生成资源,或者需要并行运行更多作业,则可以: