Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
代理池是代理的集合。 可在代理池中组织代理,而无需单独管理每个代理。 配置代理时,该代理被注册到一个指定的池。 在创建管道时,指定管道运行所在的池。 当你运行管道时,管道将在满足管道需求的池中的代理上运行。
托管的 DevOps 池及其代理池在 Azure 门户中进行管理。 如果您使用托管的 DevOps 池,请查看创建池的快速入门。
在 Azure Pipelines 中,池的范围限定为整个组织,因此可以在项目之间共享代理计算机。
在 Azure DevOps Server 中,代理池的范围限定为整个服务器,因此你可以跨项目和集合共享代理计算机。
代理池作业在单个代理上运行作业。 如果需要在所有代理上运行作业,例如经典发布管道的部署组,请参阅 预配部署组。
如果你是组织管理员,则从管理员设置中的 “代理池 ”选项卡创建和管理代理池。
如果你是项目团队成员,则从项目设置中的 “代理池 ”选项卡创建和管理代理池。
默认代理池
默认情况下提供以下代理池:
- 默认池:使用它注册你自部署的自承载代理。
- Azure Pipelines:此托管池附带各种 Windows、Linux 和 macOS 镜像。 有关可用映像及其已安装软件的完整列表,请参阅 Microsoft 托管的代理。
默认情况下,项目中的所有参与者都是托管池上“用户”角色的成员。 此指定允许项目中的每个参与者使用Microsoft托管代理创作和运行管道。
在管道中指定池
若要从 Azure DevOps Services YAML 管道中的 Azure Pipelines 池中选择Microsoft托管的代理,请使用此表中的 YAML VM 映像标签指定映像的名称。
pool:
vmImage: ubuntu-latest # This is the default if you don't specify a pool or vmImage.
使用无任何需求的专用池:
pool: MyPool
管理池和队列
组织管理员从管理员设置中的 “代理池 ”选项卡创建和管理代理池。
项目团队成员从项目设置中的 “代理池 ”选项卡创建和管理代理池。
若要删除池,请转到代理池列表,然后选择更多选项>并选择删除。
池用于运行作业。 了解如何为作业指定池。
如果有许多用于不同团队或目的的自承载代理,则可能需要创建更多池。 使用以下指令。
创建代理池
下面是可能需要创建自承载代理池的一些典型情况。
你是项目的成员,并且想要使用团队拥有的一组计算机来运行生成和部署作业:
- 请确保你有权在项目中创建池。 在 “项目设置”中,转到 “代理池 ”窗格,然后选择“ 安全性”。 若要创建新池,必须具有 管理员 角色。
- 选择 “添加池”,然后选择创建新池的选项。
- 安装和配置代理,使它们成为新的代理池的一部分。
你是基础结构团队的成员,想要设置一个代理池,以在所有项目中使用:
- 请确保你有权在项目中创建池。 在 “组织设置”中,转到 “代理池 ”窗格,然后选择“ 安全性”。
- 创建新的代理池,并在创建池时在所有项目中选择“自动预配此代理池”选项。 此设置可确保所有项目都有权访问此代理池。
- 安装和配置代理,使它们成为新的代理池的一部分。
您希望与其中一些项目共享一组代理机器,但不是与所有项目共享。
- 进入其中一个项目的设置。 添加代理池,然后选择在组织级别创建新池的选项。
- 转到其他项目并在其中每个项目中创建一个池。 选择“使用来自组织的现有代理池”。
- 安装和 配置代理以成为共享代理池的一部分。
你是项目的成员,并且想要使用团队拥有的一组计算机来运行生成和部署作业:
- 请确保你有权在项目中创建池。 在 “项目设置”中,转到 “代理池 ”窗格,然后选择“ 安全性”。 若要创建新池,必须具有 管理员 角色。
- 选择 “添加池”,然后选择创建新池的选项。
- 安装和配置代理,使它们成为新的代理池的一部分。
你是基础结构团队的成员,想要设置一个代理池,以在所有项目中使用:
- 请确保你有权在项目中创建池。 在 “组织设置”中,转到 “代理池 ”窗格,然后选择“ 安全性”。
- 创建新的代理池,并在创建池时在所有项目中选择“自动预配此代理池”选项。 此设置可确保所有项目都有权访问此代理池。
- 安装和配置代理,使它们成为新的代理池的一部分。
您希望与其中一些项目共享一组代理机器,但不是与所有项目共享。
- 进入其中一个项目的设置。 添加代理池,然后选择在组织级别创建新池的选项。
- 转到其他项目并在其中每个项目中创建一个池。 选择“使用来自组织的现有代理池”。
- 安装和 配置代理以成为共享代理池的一部分。
代理池的安全性
了解代理池的安全性工作原理时,可以更好地控制代理的共享和使用。
在每个 代理池上定义角色。 这些角色的成员资格控制您可以在代理池上执行的操作。
组织级别安全设置
| 组织设置中代理池上的角色 | 用途 |
|---|---|
| Reader | 此角色的成员可以查看代理池和各个代理。 通常使用此角色来添加负责监控代理和监控其健康状况的操作员。 |
| 服务帐户 | 此角色的成员可以使用组织代理池在项目中创建项目代理池。 如果遵循前面的准则创建新的项目代理池,通常无需在此处添加任何成员。 |
| 管理员 | 除了上述所有权限之外,此角色的成员还可以在组织代理池中注册或取消注册代理。 在项目中创建项目代理池时,他们还可以引用组织代理池。 他们还可以管理组织的代理池中所有角色的成员资格。 创建组织代理池的用户会自动为该池分配 管理员 角色。 |
“代理池”选项卡上的“所有代理池”节点控制所有组织代理池的安全性。 单个组织代理池的角色成员身份会自动继承自 “所有代理池” 节点。 默认情况下,使用 Azure DevOps Server 时,Azure DevOps Server 管理员也是 “所有代理池 ”节点的管理员。
项目级安全设置
每个项目代理池上也定义了角色。 这些角色的成员身份决定了您在项目级别对代理池可以执行的操作。
| 项目设置中代理池上的角色 | 用途 |
|---|---|
| Reader | 此角色的成员可以查看项目代理池。 通常使用此角色来添加用于监控该项目代理池中构建和部署作业的操作员。 |
| User | 创建管道时,此角色的成员可以使用项目代理池。 |
| 管理员 | 除了上述所有操作之外,此角色的成员还可以管理所有项目代理池角色的成员身份。 创建组织代理池的用户会自动为该池分配 管理员 角色。 |
管道权限
管道权限控制哪些 YAML 管道有权使用代理池。 管道权限不会限制来自经典管道的访问。
从以下过程之一中进行选择:
- 允许所有管道通过代理池的安全选项卡中管道权限部分右上角的更多选项来使用代理池。
- 锁定代理池,只允许选定的 YAML 管道使用它。 如果任何其他 YAML 管道引用代理池,则会引发授权请求,代理池 管理员 必须批准该请求。 此过程不会限制对经典管道的访问。
无法配置 Azure Pipelines 代理池的管道权限,因为默认情况下,所有管道都可以访问该池。
“安全”操作在“代理池”选项卡上控制项目中所有代理池的安全性。 单个项目代理池的角色成员资格会自动从此处定义的内容继承。 默认情况下,以下组将添加到所有代理池的管理员角色:生成管理员、发布管理员和项目管理员。
FAQ
如果没有安排维护时间窗,代理将何时执行维护?
如果不计划窗口,该池中的代理不会运行维护作业。
什么是维护作业?
可以将代理池配置为定期清理过时的工作目录和存储库。 此过程可以减少代理耗尽磁盘空间的可能性。 维护作业在 代理池 设置中的组织级别配置。
配置维护作业设置:
选择所需的池,然后选择 “设置” ,为该代理池配置维护作业设置。
重要
必须具有“管理生成队列”权限才能配置维护作业设置。 如果未看到 “设置 ”或“ 维护历史记录 ”选项卡,则默认情况下没有 管理员 角色拥有的权限。 有关详细信息,请参阅代理池的安全性。
配置所需的设置,然后选择“ 保存”。
选择“维护历史记录”以查看当前代理池的维护作业历史记录。 可以下载并查看日志,以查看清理步骤和采取的操作。
维护按代理池执行,而不是按计算机执行。 如果单个计算机上有多个代理池,则仍可能会遇到磁盘空间问题。
自托管代理池的维护作业看起来卡住了。 为什么?
通常,在等待在代理池中不再运行的代理上运行时,维护作业会停滞不前。 例如,代理被故意下线,或者与其通信时出现问题。
排队等候的维护作业将在等候七天后运行。 如果在此期间未运行它们,它们将自动处于失败状态。 不能更改此时间限制。
七天限制不同于 维护作业超时 设置。 后者控制代理可以花费的最大维护分钟数。 计时器在作业开始时启动,而不是当作业在代理上排队时启动。
我正在尝试创建一个项目代理池,该代理池使用现有的组织代理池,但相关控件不可用。 为什么?
在 “创建项目代理池 ”对话框中,如果其他项目代理池已引用它,则无法使用现有的组织代理池。 每个组织代理池只能由项目集合中的一个项目代理池引用。
我无法选择 Microsoft 托管的池,且无法将我的版本排队。 如何解决此问题?
要求 Azure DevOps 组织的所有者授予你使用池的权限。 请参阅代理池的安全性。
我需要更多托管生成资源。 我该怎么办?
Azure Pipelines 池为每个 Azure DevOps 组织提供云托管的生成代理和每月的免费生成分钟数。 如果需要更多Microsoft托管的生成资源,或者需要并行运行更多作业,则可以: