选择 Microsoft 托管或自托管生成代理

已完成

在本单元中,你将了解在选择生成代理时需要考虑的一些因素。 你将了解使用 Microsoft 托管代理的一些好处和限制,以及在设置自己的专用生成代理时涉及的内容。

什么是生成代理和代理池?

“生成代理”是一个执行生成任务的系统。 可以将其视为运行你的生成过程的专用服务器。

假设你有一个每天接收许多次生成请求的 Azure Pipelines 项目,或者你可能有多个项目可以使用同一类型的生成代理。 可以将生成代理组织到“代理池”中,帮助确保有一个服务器可以处理每个生成请求

当某个生成被触发时,Azure Pipelines 会从池中选择一个可用的生成代理。 如果所有代理都处于忙碌状态,则该进程等待其中一个代理变得可用。

使用 Microsoft 托管代理时,指定要使用的池中的 VM 映像。 下面是一个使用 Ubuntu 20.04 生成代理的现有生成配置示例。

pool:
  vmImage: 'ubuntu-20.04'
  demands:
  - npm

如果使用 Microsoft 托管代理,则使用 vmImage 指定需要哪种类型的系统。 Microsoft 提供了许多类型的 VM 映像,包括运行 Windows、macOS 和 Linux 的各种风格的映像。

demands 部分指定需要生成机器具备哪些软件或功能。

使用自己池中的生成代理(也称为“专用池”)时,请指定池的名称。 下面是一个示例:

pool:
  name: 'MyAgentPool'
  demands:
  - npm

如果不需要 demands 部分,可以像这样缩短语法:

pool: 'MyAgentPool'

在本模块中,将创建一个生成代理,稍后将其添加到池中。

可以使用哪种代理?

选择生成代理时,有两个因素需要考虑:

  • 你想在其上进行生成的操作系统
  • 是否可以使用 Microsoft 托管代理或是否需要提供自己的代理

Azure Pipelines 支持以下操作系统:

生成代理的选择主要取决于用于生成代码的工具。 例如,如果使用 Xcode 生成应用程序,可以选择 macOS 代理。 如果需要 Visual Studio,你可能会选择 Windows 代理。

你现有的生成配置使用 Microsoft 托管代理。 托管代理在 Microsoft 提供给你的基础结构上运行。

专用代理使用你提供的基础结构。 你的代理可以是在云中或在数据中心运行的系统。 只要代理满足需求,并且能够连接到 Azure Pipelines,那么这两种代理都行。 在此模块中,你将使用我们提供的在 Azure 上运行的 VM。

何时应使用自己的生成代理?

对于许多生成任务,Microsoft 托管代理可以完成所需的一切。 它是入门的最简单方法。

Microsoft 负责所有安全和其他操作系统更新。 你只需定义要运行的生成配置。

托管代理还包含用于生成许多常见应用程序类型的软件。 可以在生成过程中添加所需的任何其他软件。

Microsoft 托管代理有一些限制,包括:

  • 生成持续时间:生成作业可以运行最多 6 小时。
  • 磁盘空间:托管代理为源和生成输出提供固定的存储空间。 该存储空间可能不够。
  • CPU、内存和网络:托管代理在 Microsoft Azure 常规用途的 VM 上运行。 Standard_DS2_v2 介绍了可期望的 CPU、内存和网络特性。
  • 交互性:无法登录到托管代理。
  • 文件共享:无法将生成工件拖放到通用命名约定 (UNC) 文件共享。

尽管托管代理的设置相对容易,但除了刚才描述的限制,使用自己的生成代理还是有一些好处的。

例如,使用托管代理时,你将与其他 Azure DevOps 用户共享基础结构。 虽然启动生成通常只需要几秒钟,但是根据 Microsoft 系统的负载情况,它可能需要更长时间。

此外,使用托管代理时,每次生成都会得到一个干净的系统。 当你启用自己的生成代理时,可以决定每次是执行一次干净生成,还是执行一次“增量生成”。 使用增量生成,可以在现有生成工具和编译代码基础上生成。 增量生成花费的时间更少,因为系统已经安装了许多生成工具和依赖组件。

另一方面,因为生成基础结构属于你自己,所以你有责任确保生成代理包含最新的软件和安全补丁。

如何设置专用生成代理?

专用生成代理包含生成应用程序所需的软件。 它还包含使系统能够连接到 Azure Pipelines 和接收生成作业的代理软件。

设置专用代理时,你将提供用于运行生成的基础结构。 这使你可以灵活地运行和维护代理。

例如,可以:

  • 手动设置生成代理:打开系统,登录并以交互方式安装生成工具和代理软件。

  • 自动化流程:启动系统,运行脚本或工具以安装生成工具和代理软件。 你可以在系统联机后或预配过程中配置代理。

    例如,在 Azure 上运行生成代理时,可使用 Azure 资源管理器模板(ARM 模板)或 Bicep 启动系统,并将其配置为充当生成代理,这些操作可在一个步骤中完成。 HashiCorp 提供的 Terraform 是自动化流程的另一种方法。 Terraform 适用于许多类型的基础结构,包括 Azure。

  • 创建映像:创建某个已配置环境的映像或快照。 然后使用该映像创建池中所需的尽可能多的相同系统。

手动配置是一种很好的入门方式,因为它能让你理解流程。 当你只需一个生成代理时,这也是最快的设置方法。

当需要很多生成代理,或者需要定期启动和拆卸生成基础结构时,自动化非常有用。 需要多个代理时,可以从手动流程转移到自动化流程。

映像是一种自动化形式。 它们有助于节省时间,因为所有软件都是预先配置好的。 条件是,你需要定期重新生成映像,以便包含最新的 OS 补丁和生成工具。 HashiCorp 的 Packer 是一个用于创建映像的常用工具。

对于 Space Game 场景,你决定使用专用生成代理。

知识检查

1.

假设要生成视频游戏。 生成过程需要 2 小时来运行和使用 18-20 GB 的磁盘空间编译游戏资产。 可以使用哪些类型的生成代理?

2.

假设要生成一个可在 macOS、Linux 和 Windows 上运行的应用程序。 该如何为每个目标平台生成应用?

3.

自托管生成代理: