Azure Pipelines 代理

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

注意

在 Microsoft Team Foundation Server (TFS) 2018 和更低版本中,生成和发布管道被称为“定义”,运行被称为“生成”,服务连接被称为“服务终结点”,阶段被称为“环境”,而作业被称为“阶段” 。

若要生成代码或使用 Azure Pipelines 部署软件,至少需要一个代理。 添加更多代码和人员时,你最终需要更多的代码和人员。

管道运行时,系统会启动一个或多个作业。 代理是计算基础结构,带有已安装的代理软件,一次运行一个作业。

Azure Pipelines 提供了多种不同类型的代理。

代理类型 说明 可用性
Microsoft 托管代理 由 Microsoft 托管和管理的代理 Azure DevOps Services
自托管代理 配置和管理的代理,托管在 VM 上 Azure DevOps Services、Azure DevOps Server、TFS
Azure 虚拟机规模集代理 一种使用 Azure 虚拟机规模集的自承载代理,可自动缩放以满足需求 Azure DevOps Services

作业可以直接 在代理的主机上容器中运行。

Microsoft 托管代理

如果你的管道位于 Azure Pipelines 中,可以选择使用 Microsoft 托管代理来运行作业。 Microsoft 托管的代理可以为你处理维护和升级操作。 每次运行管道时,都会为管道中的每个作业获取一个全新的虚拟机。 虚拟机会在一个作业后被丢弃,这意味着作业对虚拟机文件系统所做的任何更改(例如签出代码)将不适用于下一个作业。 Microsoft 托管代理可以直接在 VM 上运行作业,也可以在容器中运行作业。

Azure Pipelines 为 Microsoft 托管代理提供名为“Azure Pipelines”的预定义代理池。

对于许多团队来说,这是运行作业的最简单方法。 可先尝试此操作,了解其是否适用于你的生成或部署。 如果不适用,可以使用自托管代理。

提示

可以免费试用 Microsoft 托管代理。

详细了解 Microsoft 托管的代理

自托管代理

自行设置和管理以运行作业的 代理是自承载代理。 你可以在 Azure Pipelines 或 Azure DevOps Server(以前称为 Team Foundation Server (TFS))中使用自托管代理。 自托管代理可让你进行更多控制,以安装生成和部署所需的依赖软件。 此外,计算机级缓存和配置在运行到运行时保持一直存在,这可以提高速度。

注意

尽管每台计算机可以安装多个代理,但我们强烈建议每台计算机仅安装一个代理。 安装两个或更多个代理可能会对性能和管道结果产生负面影响。

提示

在安装自承载代理之前,可能需要查看 Microsoft 托管的代理池是否适合你。 在许多情况下,这是最简单的方法。 试一试

可在 Linux、macOS 或 Windows 计算机上安装代理。 还可在 Docker 容器上安装代理。 有关安装自托管代理的详细信息,请参阅:

注意

在 macOS 上,需要清除下载存档上的特殊属性,以防止在运行时为 tar 文件中 ./config.sh 的每个程序集显示 Gatekeeper 保护。 以下命令清除文件上的扩展属性:

xattr -c vsts-agent-osx-x64-V.v.v.tar.gz  ## replace V.v.v with the version in the filename downloaded.

# then unpack the gzip tar file normally:

tar xvfz vsts-agent-osx-x64-V.v.v.tar.gz

在计算机上安装代理后,可继续安装作业所需的任何其他软件。

注意

代理广泛向后兼容。 只要 Azure DevOps 不要求更高版本的代理,任何版本的代理都应与任何 Azure DevOps 版本兼容。

我们只支持最新版本的代理,因为这是唯一保证具有所有最新修补程序和 bug 修复的版本。

节点运行器版本

代理附带多个版本的 NodeJS 库,以支持使用不同节点处理程序的目标任务。

所有官方 Azure DevOps 任务都使用 Node 10 作为通用处理程序,但是,客户仍可能使用使用过时的节点 6 库的自定义任务。 为了支持与当前已达到生命周期结束的 Node 的向后兼容性,我们提供了以下自助服务方法来手动安装指定的 Node 运行器。

  • 手动安装 Node 6 运行器。 有关手动安装 Node 6 运行器的详细信息,请参阅 Node 6 支持 了解更多详细信息。

  • 在管道中使用 NodeTaskRunnerInstaller@0 任务,这些任务需要过时的 Node 6 库。

  • 安装包含节点 6 的代理包。

    Azure Pipelines 提供两个版本的代理包。

    • vsts-agent-* 包支持节点 6。
    • pipelines-agent-* 包不支持节点 6。 此版本的包将来将成为默认代理包。

    如果知道未使用任何节点 6 依赖任务,并且不希望在代理计算机上安装节点 6,则可以从 中的 备用代理下载 部分 https://github.com/microsoft/azure-pipelines-agent/releases安装代理。

Azure 虚拟机规模集代理

Azure 虚拟机规模集代理是一种可自动缩放以满足需求的自承载代理。 这种弹性可减少一直运行专用代理的需求。 与 Microsoft 托管的代理不同,你可以灵活地处理运行代理的计算机的大小和映像。

可以指定虚拟机规模集、要保持待机状态的代理数、规模集中的最大虚拟机数,Azure Pipelines 会为你管理代理的缩放。

有关详细信息,请参阅 Azure 虚拟机规模集代理

并行作业

并行作业 表示可以在组织中同时运行的作业数。 如果你的组织有一个并行作业,则可以在组织中一次运行一个作业,任何其他并发作业将排入队列,直到第一个作业完成。 若要同时运行两个作业,需要两个并行作业。 在 Azure Pipelines 中,可以在 Microsoft 托管的基础结构上运行并行作业,也可以在自己的 (自承载) 基础结构上运行并行作业。

默认情况下,Microsoft 在每个组织中提供至少一个并行作业的免费服务层。 根据需要运行的并发管道数,可能需要更多并行作业才能同时使用多个 Microsoft 托管代理或自承载代理。 有关并行作业和不同免费服务层的详细信息,请参阅 Azure Pipelines 中的并行作业

可能需要更多并行作业才能同时使用多个代理:

重要

从 Azure DevOps Server 2019 开始,你无需为发布中的自托管并发作业付费。 仅受你拥有的代理数的限制。

功能

每个自承载代理都有一组功能,用于指示它可以执行的操作。 功能是代理软件自动发现的名称-值对,在这种情况下,它们称为 系统功能,或者你定义的那些功能,在这种情况下,它们称为 用户功能

代理软件自动确定各种系统功能,例如计算机名称、操作系统类型和计算机上安装的某些软件的版本。 此外,计算机中定义的环境变量会自动显示在系统功能列表中。

注意

将环境变量存储为功能意味着在代理运行时,存储的功能值用于设置环境变量。 此外,任何任务都不会选取和使用在代理运行时对环境变量所做的任何更改。 如果你有更改的敏感环境变量,并且不希望将其存储为功能,则可以通过设置 VSO_AGENT_IGNORE 环境变量来忽略它们,并使用逗号分隔的变量列表来忽略它们。 例如, PATH 是一个关键变量,在安装软件时可能需要忽略它。

创作管道时,需要指定代理的某些 要求 。 系统仅将作业发送给具有与管道中指定的需求匹配的功能 代理。 因此,代理功能允许你将作业定向到特定代理。

注意

需求和功能设计用于自托管代理,以便作业可与满足作业要求的代理匹配。 使用 Microsoft 托管代理时,为代理选择符合作业要求的映像,这样的话,虽然可以向 Microsoft 托管代理添加功能,但无需将功能与 Microsoft 托管代理一起使用。

配置需求

若要向 YAML 生成管道添加需求,请将 行 demands: 添加到 pool 部分。

pool:
  name: Default
  demands: SpecialSoftware # exists check for SpecialSoftware

可以检查是否存在某个功能,或与功能的值进行比较。 有关详细信息,请参阅 YAML 架构 - 需求

Azure DevOps Server 2019 及更高版本中支持 YAML 管道。

配置代理功能

可以通过导航到“代理 ”并选择所需代理的“ 功能 ”选项卡来查看代理的详细信息,包括其版本和系统功能,并管理其用户功能。

  1. 在 Web 浏览器中,导航到“代理池”:

    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。

    1. 导航到项目,然后选择“设置”(齿轮图标)>“代理队列”。

      选择“设置”、“代理队列”,2018。

    2. 选择“管理池”。

      选择“管理池”,2018。

  2. 导航到“功能”选项卡:

    1. 从“代理池”选项卡中,选择所需的代理池。

      从“代理池”中,选择所需的代理池。

    2. 选择“代理”,然后选择所需的代理。

      选择”代理”,然后选择代理。

    3. 选择“功能”选项卡。

      选择“功能”选项卡。

      注意

      Microsoft 托管代理不显示系统功能。 有关 Microsoft 托管代理上安装的软件的列表,请参阅使用 Microsoft 托管代理

    1. 从“代理池”选项卡中,选择所需的池。

      选择所需的池。

    2. 选择“代理”,然后选择所需的代理。

      选择“代理”,然后选择所需的代理。

    3. 选择“功能”选项卡。

      “代理功能”选项卡。

    1. 从“代理池”选项卡中,选择所需的池。

      选择所需的选项卡,2019。

    2. 选择“代理”,然后选择所需的代理。

      选择所需的代理,2019。

    3. 选择“功能”选项卡。

      选择“功能”选项卡,2019。

    选择所需的代理,然后选择“功能”选项卡。

    “代理功能”选项卡,2018。

  3. 若要向代理注册新功能,请选择 “添加新功能”。

提示

在自承载代理上安装新软件后,必须重启代理才能显示新功能。 有关详细信息,请参阅 重启 Windows 代理重启 Linux 代理重启 Mac 代理

通信

与 Azure Pipelines 的通信

与Azure DevOps Server通信

与 TFS 通信

代理与 Azure Pipelines 或 Azure DevOps Server 通信以确定它需要运行哪个作业,并报告日志和作业状态。 此通信始终由代理发起。 从代理到 Azure Pipelines 或 Azure DevOps Server 的所有消息都通过 HTTP 或 HTTPS 发送,具体取决于代理的配置方式。 此拉取模型允许在不同的拓扑中配置代理,如下所示。

本地安装中的代理拓扑。

Azure DevOps Services 中的代理拓扑。

下面是代理与 Azure Pipelines 或 Azure DevOps Server 之间的常见通信模式。

  1. 用户向 Azure Pipelines 注册代理,或者通过将代理添加到代理池来Azure DevOps Server代理。 需要是 代理池管理员 才能在该代理池中注册代理。 代理池管理员身份仅在注册时需要,不会在代理上一直需要,并且不会用于代理与 Azure Pipelines 或 Azure DevOps Server 之间的任何后续通信。 注册完成后,代理将下载 侦听器 OAuth 令牌 ,并使用它来侦听作业队列。

  2. 代理使用 HTTP 长轮询侦听是否已在 Azure Pipelines/Azure DevOps Server 的作业队列中为其发布新作业请求。 当作业可用时,代理将下载作业以及 特定于作业的 OAuth 令牌。 此令牌由 Azure Pipelines/Azure DevOps Server为管道中指定的作用域标识生成。 该标记是短期的,代理使用它在该作业内的 Azure Pipelines 或 Azure DevOps Server 上访问资源(例如源代码)或修改资源(例如上传测试结果)。

  3. 作业完成后,代理将放弃特定于作业的 OAuth 标记,并返回检查是否有新作业请求使用侦听器 OAuth 标记。

代理与 Azure Pipelines/Azure DevOps Server 之间交换的消息的有效负载使用非对称加密进行保护。 每个代理都有一个公钥/私钥对,公钥在注册期间与服务器交换。 服务器在将作业的有效负载发送到代理之前,使用公钥对其加密。 代理使用其私钥解密作业内容。 这就是存储在管道或变量组中的秘密在与代理交换时的安全方式。

注意

代理支持 UTF-8 客户端编码输出。 但是,如果系统的编码与 UTF-8 不同,则可能会遇到日志输出方面的一些问题。 例如,日志可能包含系统编码无法识别的字符,因此它们可能显示为乱码或缺失的符号。

部署到目标服务器的通信

使用代理将项目部署到一组服务器时,它必须与这些服务器建立“视线”连接。 Microsoft 托管的代理池默认与 Azure 中运行的 Azure 网站和服务器建立连接。

注意

如果 Azure 资源在 Azure 虚拟网络中运行,则可以获取部署 Microsoft 托管代理的代理 IP 范围,以便为 Azure VNet 配置防火墙规则以允许代理进行访问。

如果你的本地环境没有连接到 Microsoft 托管的代理池(这通常是由于中间防火墙的原因),你将需要在本地计算机上手动配置自托管代理。 代理必须连接到目标本地环境,并且可以访问 Internet 以连接到 Azure Pipelines 或 Team Foundation Server,如下图所示。

本地环境的代理连接

身份验证

若要注册代理,需要是代理池中 管理员角色 的成员。 代理池管理员身份仅在注册时需要,不会在代理上一直需要,并且不会用于代理与 Azure Pipelines 或 Azure DevOps Server 之间的任何后续通信。 此外,你必须是服务器的本地管理员才能配置代理。

注册代理时,请从以下身份验证类型中进行选择,代理设置会提示你输入每种身份验证类型所需的特定附加信息。 有关详细信息,请参阅 自承载代理身份验证选项

  • PAT
  • AAD (设备代码流身份验证)
  • SP (服务主体身份验证)
  • PAT
  • 互生使用基本身份验证连接到 Azure DevOps Server 或 TFS。 选择“ 备用 ”后,系统会提示输入凭据。

Windows 代理在 Azure DevOps Server 和 TFS 上具有以下两个附加身份验证选项。

  • 洽谈通过 NTLM 或 Kerberos 等Windows 身份验证方案以登录用户以外的用户身份连接到 TFS。 选择“协商”后,系统会提示输入凭据。
  • 集成 (默认) 通过 NTLM 或 Kerberos 等Windows 身份验证方案使用已登录用户的凭据将 Windows 代理连接到 TFS。 选择此方法后,系统不会提示你输入凭据。

重要

必须将服务器 配置为支持身份验证方法 ,才能使用备用、协商或集成身份验证。

用于注册代理的身份验证方法仅在代理注册期间使用。 若要详细了解注册后代理如何与 Azure Pipelines 通信,请参阅 与 Azure Pipelines 或 TFS 通信

交互与服务

可以将自托管代理作为服务或交互进程运行。 配置代理后,建议首先在交互模式下试用它,以确保其正常工作。 然后,对于生产使用,我们建议你以以下模式之一运行代理,以便它可靠地保持在运行状态。 这些模式还可确保代理在重启计算机时自动启动。

  1. 作为服务。 可利用操作系统的服务管理器来管理代理的生命周期。 此外,当代理作为服务运行时,自动升级代理的体验更好。

  2. 作为启用了自动登录的交互式进程。 在某些情况下,可能需要以交互方式运行代理以供生产使用,例如运行 UI 测试。 当代理配置为在此模式下运行时,屏幕保护程序也会被禁用。 某些域策略可能会阻止你启用自动登录或禁用屏幕保护程序。 在这种情况下,可能需要从域策略中寻求豁免,或在域策略不适用的工作组计算机上运行代理。

    注意

    启用自动登录或禁用屏幕保护程序时存在安全风险,因为你允许其他用户访问计算机并使用自动登录的帐户。 如果将代理配置为按此方式运行,则必须确保计算机受到物理保护;例如,位于安全设施中。 如果使用远程桌面通过自动登录访问运行代理的计算机,则只需关闭远程桌面会导致计算机被锁定,并且在此代理上运行的任何 UI 测试都可能会失败。 若要避免这种情况,请使用 tscon 命令从远程桌面断开连接。 例如:

    %windir%\System32\tscon.exe 1 /dest:console

代理帐户

无论是以服务的形式运行代理还是以交互方式运行代理,都可以选择用于运行代理的计算机帐户。 (请注意,这与向 Azure Pipelines 或 Azure DevOps Server 注册代理时使用的凭据不同。) 代理帐户的选择完全取决于生成和部署作业中运行的任务的需求。

例如,若要运行使用 Windows 身份验证 访问外部服务的任务,必须使用有权访问该服务的帐户运行代理。 但是,如果正在运行需要浏览器的 UI 测试(如 Selenium 或编码的 UI 测试),则会在代理帐户的上下文中启动浏览器。

在 Windows 上,应考虑使用网络服务或本地服务等服务帐户。 这些帐户具有受限的权限,并且其密码不会过期,这意味着代理在一段时间内需要较少的管理。

代理版本和升级

我们会每隔几周在 Azure Pipelines 中更新一次代理软件。 我们用 {major}.{minor} 格式来表示代理版本。 例如,如果代理版本为 2.1,则主要版本为 2,次要版本为 1。

Microsoft 托管的代理始终保持最新状态。 如果较新版本的代理仅在 次要 版本中不同,则通常可以自动更新自承载代理, (在 代理池中配置此设置,选择代理 “设置” - 默认由 Azure Pipelines) 启用。 当平台功能或管道中使用的其中一个任务需要较新版本的代理时,将请求升级。

如果以交互方式运行自承载代理,或者有较新的 代理主 版本可用,则可能需要手动升级代理。 可以从组织下的“ 代理池 ”选项卡轻松执行此操作。 管道在可以面向兼容的代理之前不会运行。

更新自托管代理

  1. 导航到“项目设置”、“代理池”。

    项目设置,代理池

  2. 选择代理池,然后选择 “更新所有代理”。

    更新所有代理

    还可以通过从“...”菜单中选择“更新代理”来单独更新代理。

    更新代理

  3. 选择“ 更新 ”以确认更新。

    更新所有代理确认

  4. 更新请求将针对池中的每个代理排队,并在任何当前正在运行的作业完成时运行。 升级通常只需几分钟 - 下载最新版本的代理软件 (大约 200 MB) ,将其解压缩,并使用新版本重启代理。 可以在 “代理 ”选项卡上监视代理的状态。

我们会使用 Azure DevOps Server 和 TFS 中的每次更新来更新代理软件。 我们用 {major}.{minor} 格式来表示代理版本。 例如,如果代理版本为 2.1,则主要版本为 2,次要版本为 1。

如果Azure DevOps Server或 TFS 服务器具有较新版本的代理,并且较新的代理仅在次要版本中不同,则通常会自动升级。 当平台功能或管道中使用的其中一个任务需要较新版本的代理时,将请求升级。 从 Azure DevOps Server 2019 开始,无需等待新的服务器版本。 可以将 新版本的代理上传到应用程序层,该版本将作为升级提供。

如果以交互方式运行代理,或者有较新的 代理主 版本可用,则可能需要手动升级代理。 可以从项目集合下的“ 代理池 ”选项卡轻松执行此操作。 管道在可以面向兼容的代理之前不会运行。

可以通过导航到“ 代理池 ”并选择所需代理的“ 功能 ”选项卡来查看代理的版本,如 配置代理功能中所述。

若要以编程方式触发代理更新,可以使用代理更新 API,如 如何以编程方式触发特定代理池的代理更新?部分所述。

注意

对于没有 Internet 访问权限的服务器,请手动将代理 zip 文件复制到以下文件夹中以用作本地文件。 如果 代理 文件夹不存在,请创建该文件夹。

  • Windows: %ProgramData%\Microsoft\Azure DevOps\Agents
  • Linux:usr/share/Microsoft/Azure DevOps/Agents
  • macOS:usr/share/Microsoft/Azure DevOps/Agents

如果 代理 文件夹不存在,请创建该文件夹。

常见问题解答

如何确保我使用的是最新的 v2 代理版本?

  1. 导航到“代理池”选项卡:

    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。

    1. 导航到项目,然后选择“设置”(齿轮图标)>“代理队列”。

      选择“设置”、“代理队列”,2018。

    2. 选择“管理池”。

      选择“管理池”,2018。

  2. 单击包含代理的池。

  3. 确保已启用代理。

  4. 导航到“功能”选项卡:

    1. 从“代理池”选项卡中,选择所需的代理池。

      从“代理池”中,选择所需的代理池。

    2. 选择“代理”,然后选择所需的代理。

      选择”代理”,然后选择代理。

    3. 选择“功能”选项卡。

      选择“功能”选项卡。

      注意

      Microsoft 托管代理不显示系统功能。 有关 Microsoft 托管代理上安装的软件的列表,请参阅使用 Microsoft 托管代理

    1. 从“代理池”选项卡中,选择所需的池。

      选择所需的池。

    2. 选择“代理”,然后选择所需的代理。

      选择“代理”,然后选择所需的代理。

    3. 选择“功能”选项卡。

      “代理功能”选项卡。

    1. 从“代理池”选项卡中,选择所需的池。

      选择所需的选项卡,2019。

    2. 选择“代理”,然后选择所需的代理。

      选择所需的代理,2019。

    3. 选择“功能”选项卡。

      选择“功能”选项卡,2019。

    选择所需的代理,然后选择“功能”选项卡。

    “代理功能”选项卡,2018。

  5. 查找 Agent.Version 功能。 可以针对最新发布的代理版本检查此值。 请参阅 Azure Pipelines 代理,并检查页面上列出的最高版本号。

  6. 每个代理在运行需要较高版本的代理的任务时,都会自动自行更新。 如果要手动更新某些代理,请右键单击池,然后选择“更新所有代理”。

是否可以更新属于 Azure DevOps Server 池的 v2 代理?

是。 从 Azure DevOps Server 2019 开始,可以将服务器配置为在本地磁盘上查找代理包文件。 此配置将替代服务器在发布时附带的默认版本。 当服务器无权访问 Internet 时,此方案也适用。

  1. 在可以访问 Internet 的计算机上,从 Azure Pipelines 代理 GitHub 版本页下载代理包文件(.zip 或 .tar.gz 表单形式)的最新版本。

  2. 使用所选方法(如 U 盘、网络传输等)将下载的包文件传输到每个 Azure DevOps Server 应用层。 将代理文件放在 %ProgramData%\Microsoft\Azure DevOps\Agents 文件夹下。 如果 代理 文件夹不存在,请创建该文件夹。

  3. 你已完成所有设置! 现在,只要更新代理,Azure DevOps Server 都将使用本地文件。 每个代理在运行需要较高版本的代理的任务时,都会自动自行更新。 但是,如果要手动更新某些代理,请右键单击池,然后选择“更新所有代理”。

自托管代理与 Microsoft 托管的代理相比是否有任何性能优势?

在许多情况下,有。 具体而言:

  • 如果使用自托管代理,则可运行增量生成。 例如,如果定义的管道不清理存储库且不执行干净生成,则生成通常运行速度更快。 使用 Microsoft 托管的代理时,除非使用 诸如缓存) 等功能,否则不会 (获得这些好处,因为代理在生成或发布管道完成后被销毁。

  • Microsoft 托管的代理可能需要更长的时间来启动你的生成。 虽然将作业分配给 Microsoft 托管的代理通常需要几秒钟,但有时可能需要几分钟时间才能根据系统上的负载来分配代理。

能否在同一台计算机上安装多个自托管代理?

是。 此方法适用于运行不消耗许多共享资源的作业的代理。 例如,如果代理运行的发布主要用于协调部署,并且不会在代理本身上执行太多操作,则可尝试使用该方法。

你可能会发现,在其他情况下,在同一台计算机上运行多个代理不会获得太大的效率。 例如,运行消耗大量磁盘和 I/O 资源的生成的代理可能不值得。

如果并行生成作业使用相同的单一实例工具部署(例如 npm 包),也可能会遇到问题。 例如,一个生成可能会更新某个依赖项,而另一个生成正在使用该依赖项,这可能会导致结果不可靠并出现错误。

取消管道作业时代理的行为是什么?

对于 Microsoft 托管的代理,代理会拆掉并返回到 Azure Pipelines 池。

对于自托管代理:

取消管道时,代理会将一系列命令发送到执行当前步骤的进程。 发送第一个命令时超时为 7.5 秒。 如果进程尚未终止,则会发送第二个命令,超时为 2.5 秒。 如果进程尚未终止,则代理会发出命令来终止进程。 如果进程不遵循两个初始终止请求,它将终止。 从初始请求到终止大约需要 10 秒。

为取消管道而向进程发出的命令因代理操作系统而异。

  • macOS 和 Linux - 发送的命令是 SIGINT,后跟 SIGTERM,后跟 SIGKILL。
  • Windows - 发送到进程的命令为 Ctrl+C,后跟 Ctrl+Break,后跟 Process.Kill。

如何以编程方式触发特定代理池的代理更新?

可以使用以下 API 触发池的代理更新:

POST https://dev.azure.com/{organization}/_apis/distributedtask/pools/{poolId}/messages?agentId={agentId}&api-version=6.0
POST https://{server url}/tfs/{collection}/_apis/distributedtask/pools/{poolId}/messages?agentId={agentId}&api-version=6.0

注意

有关 API 和Azure DevOps Server和 TFS 版本映射的详细信息,请参阅 API 和 TFS 版本映射

URI 参数

名称 必需 类型 说明
agentId query False 字符串 要更新的代理。 如果未指定 -将为所有代理触发更新。
organization path True 字符串 Azure DevOps 组织的名称。
poolId path True 整数 (int32) 要使用的代理池
api-version query False 字符串 要使用的 API 版本。 这应设置为“6.0”才能使用此版本的 API。

若要触发代理更新,请求正文应为空。

注意

Azure Pipelines 代理在 GitHub 上开放源代码。

了解更多

有关代理的详细信息,请参阅 使用 Azure DevOps 生成应用程序 学习路径中的以下模块。