代理软件版本 3

注意

本文引用了 CentOS,这是一个接近生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑你的使用和规划。 有关详细信息,请参阅 CentOS 生命周期结束指南

管道团队正在将代理软件从版本 2.x(使用 .NET Core 3.1)升级到版本 3.x(使用 .NET 6)。 新的代理版本支持新的 Apple 芯片硬件和较新的操作系统,如 Ubuntu 22.04 或 ARM64 上的 Windows。

注意

此功能从 Azure DevOps Server 2022.1 开始提供。

在支持的操作系统上升级到 3.x 代理

如果你在 .NET6 支持的较新操作系统上运行自托管代理,则会自动升级到新代理版本。

3.x 代理支持以下操作系统。

  • Linux
    • X64
      • CentOS 7, 8
      • Debian 10+
      • Fedora 36+
      • openSUSE 15+
      • Red Hat Enterprise Linux 7+
        • 不再需要单独的包
      • SUSE Enterprise Linux 12 SP2 或更高版本
      • Ubuntu 22.04、20.04、18.04、16.04
      • Azure Linux 2.0
    • ARM64
      • Debian 10+
      • Ubuntu 22.04、20.04、18.04
    • Alpine x64
  • macOS
    • X64
      • macOS 10.15“Catalina”
      • macOS 11.0“Big Sur”
      • macOS 12.0“Monterey”
      • macOS 13.0 "Ventura"
    • ARM64
      • macOS 11.0“Big Sur”
      • macOS 12.0“Monterey”
      • macOS 13.0 "Ventura"
      • 注意:并非所有 Azure Pipeline 任务都已更新为支持 ARM64
  • Windows
    • 客户端操作系统
      • Windows 7 SP1 ESU
      • Windows 8.1
      • Windows 10
      • Windows 11
    • 服务器操作系统
      • Windows Server 2012 或更高版本

在不支持的操作系统上升级到 3.x 代理

如果在 .NET 6 不支持的操作系统上运行自托管代理,则必须更新计算机以使用 .NET 6 支持的较新的操作系统。

以下操作系统列表通常用于自托管 2.x 代理。 .NET 6 不支持这些操作系统,不能用于运行基于 .NET 6 的新版本 3.x 代理。

系统/分发 .NET 6 不支持的版本
CentOS < 7
Debian <= 4.9
Fedora < = 32
RedHat Enterprise Linux 7 <= 6
Ubuntu < 18.04 LTS
macOS < 10.15

可以使用脚本 来预测自承载池中的代理是否能够从 2.x 升级到 3.x。

尝试在代理版本 2.218(或 RHEL 6 上的 2.214)上运行管道时,在此处列出的不受支持的操作系统之一上运行的管道将失败,并显示以下错误消息:This operating system will stop receiving updates of the Pipelines Agent in the future. To be able to continue to run pipelines please upgrade the operating system or set an environment variable or agent knob "AGENT_ACKNOWLEDGE_NO_UPDATES" to "true". See https://aka.ms/azdo-pipeline-agent-v2-eos for more information.

可通过以下任一方法解决该错误:

  1. 将代理计算机升级或移动到本文前面列出的受支持操作系统之一。 这是首选解决方案,可用于获取将来的代理更新,
  2. 通过设置环境变量或管道变量,在代理上设置 AGENT_ACKNOWLEDGE_NO_UPDATES 变量。
  • 可以通过在代理上配置环境变量来设置 AGENT_ACKNOWLEDGE_NO_UPDATES,例如 /etc/environment 或 etc/profile.d:AGENT_ACKNOWLEDGE_NO_UPDATES=true

  • 可以设置管道变量。

    jobs:
    - job: 'agentWithVariables'
      displayName: 'Agent with variables'
    
      variables:
        AGENT_ACKNOWLEDGE_NO_UPDATES: 'true' # Required to not fail job on operating system that is not supported by .NET 6
    

常见问题解答

2.x 与 3.x 代理有什么区别?

2.x 代理(例如 2.212)是 .NET Core 3.1,3.x 代理(例如 3.212)是 .NET 6。 在 I 和 II 阶段期间,这两个版本都可用,3.x 版本处于预发行版中。

如何检查代理以确认代理是否可以升级到 3.x?

可以使用脚本 来预测自托管池中的代理是否能够从 2.x 升级到 3.x。

今后将如何修补代理中的安全问题?

当 .NET 6 代理在 2023 年第 1 季度正式可用于自托管池时,通常不会为 2.x 代理完成修补程序。 仅针对 3.x 代理执行修补程序。 然而,我们也有一些 Azure DevOps 服务器客户仍依赖于 2.x 代理。 因此,我们将根据具体情况审查安全问题,以做出决定。

使用不受支持的 OS 时,需要执行什么操作?

现在应迁移到 .NET 6 支持的较新的操作系统。 否则,代理可能会尝试升级,并且该代理会失败,因为 OS 上无法安装 .NET 6。 我们将在后续博客文章中发布一些指南,以防止自动升级代理。 但是,这只是一个临时解决方案,以便有更多时间来升级代理计算机。

如果我不再处理项目中的任何更改,是否可以继续使用 2.x 代理?

否。 管道团队会定期向 Azure Pipelines 添加新功能,其中一些功能可能需要对代理进行更新,即使管道不显式依赖于该功能。 如果你根据后续博客中的指导措施来阻止代理自动升级,则代理不能用于计划管道。 如果找不到具有所需功能的代理,则管道执行将失败。

在安装 3.x 代理软件之前,是否必须安装 .NET 6?

在安装和配置 3.x 代理软件之前,无需在代理计算机上安装 .NET 6。 3.x 代理所需的所有 .NET 依赖项都是代理本身的一部分。

如果使用 3.x 代理,是否必须使用 .NET 6 生成代码?

用于运行 3.x 代理的 .NET 版本在代理安装中是自包含的,不会用于生成代码。 用于生成代码的 .NET 版本取决于管道以及已安装到代理计算机上的 .NET 版本。

我使用 Azure DevOps Server,而不是 Azure DevOps Service。 此更改是否会影响我?

否。 新代理目前仅适用于 Azure DevOps Service 客户。 但是,Azure DevOps Server 的未来版本将包含新代理。 如果你计划在未来更新到 Azure DevOps 服务器版本,管道团队建议你从现在开始将代理计算机更新到 .NET 6 支持的较新操作系统。

代理版本 3 部署时间线是怎样的?

代理版本 3 已于 2023 年 3 月发布。

当任务需要将代理更新到代理版本 3 时,会发生什么情况?

通常,当任务需要较新版本的代理时,代理将自动更新自身。 目前,尽管代理版本 2 会继续更新,但我们已禁用从代理版本 2 到代理版本 3 的自动更新。 启用后,对于与代理版本 3 不兼容的操作系统,代理版本 2.217 及更高版本不会尝试将自身更新到 v3 代理。 相反,会显示一条警告,告知用户需要先升级操作系统:The operating system the agent is running on is <OS>, which will not be supported by the .NET 6 based v3 agent. Please upgrade the operating system of this host to ensure compatibility with the v3 agent. See https://aka.ms/azdo-pipeline-agent-version