安装并启动 TeamCity 代理
TeamCity 构建代理 是一种软件,它侦听来自 TeamCity 服务器的命令并启动实际的构建过程。 一个生产环境下的 TeamCity 设置需要在专用机器上安装额外的构建代理。 在此之前,请确保阅读关于 代理服务器通讯、 系统要求、 冲突软件以及 安全性的注释。
如果您安装了与 Tomcat servlet 容器捆绑的 TeamCity ,或使用 TeamCity 的 Windows 安装程序,服务器和一个构建代理都会安装在同一台机器上。 这并不是 生产环境 推荐的配置方式,因为存在 安全问题。 此外,构建过程可能会降低网络用户界面的响应速度,从而影响整体 TeamCity 服务器的运行效率。
代理是一种软件,通常用于检出源代码、下载其他构建的工件并运行构建过程。 它的安装和配置与 TeamCity 服务器是分开的。
代理可以安装在物理机器和 云托管的虚拟机器上。
note
TeamCity 代理可以安装在与 TeamCity 服务器相同的机器上。 然而,出于生产目的,我们建议将它们安装在不同的机器上,原因有很多,其中最重要的是服务器性能。
代理可以运行任何 兼容的构建配置的构建。 每个代理可以有一个独特的环境:架构、操作系统、已安装的工具等。 这些属性定义了代理可以运行哪些构建。
一个代理可以一次运行一个构建。 代理的数量基本上限制了并行构建的数量以及运行构建过程的环境数量。
为了确保代理的平稳运行,您需要定期更新从可执行文件或归档文件安装的代理的核心软件和工具。 例如,在将 TeamCity 服务器升级到较新版本后,从现有虚拟机镜像启动的所有云代理需要一些时间来更新(此过程会自动进行,但会延迟排队构建开始的时间)。 为了确保您的代理始终运行最新的软件,请将它们作为 Docker 容器运行。
由于构建可以在 Docker 或 Podman 容器中运行,代理机器的操作系统本身并不限制代理与项目的兼容性。 换句话说,您可以在 Windows 代理上运行特定于 Linux 的任务,反之亦然。
TeamCity 构建代理包含 两个进程 :代理启动器(一个启动代理进程的 Java 进程)和代理(作为代理启动器的子进程运行的构建代理的主要进程)。
在 TeamCity 中,构建代理可以具有以下状态:
状态 | 描述 |
---|---|
已连接/未连接 | 代理已连接,表示其已在 TeamCity 服务器上注册并响应服务器命令,否则它是 已断开连接。 此状态会自动确定。
|
已授权/未授权 | 代理通过 支持人员 页面上的 Web UI 手动授权(由 云集成启动的机器上的代理除外)。 只有经过授权的构建代理才能运行构建。 在任何给定时间,授权代理的数量不能超过在服务器上输入的 代理许可证 的数量。 当代理未经授权时,许可证将被释放,可以对不同的构建代理进行授权。 购买额外的许可证,以扩展可以同时运行构建的代理数量。 当新代理首次在服务器上注册时,默认是 未授权 状态,需要手动授权才能运行构建。 如果构建代理安装并在与 TeamCity 构建服务器相同的计算机上运行,它将被自动授权。 |
启用/禁用(云代理的维护禁用) | 代理是通过 web UI 手动启用/禁用的。 TeamCity 服务器只将构建分发给已启用的代理。 代理禁用并不影响(停止)当前在代理上运行的构建。 已禁用 代理仍然可以运行构建,当构建被分配给特殊代理时(例如,通过 触发自定义构建)。 此功能通常用于暂时从 构建网格中移除代理,以调查特定于代理的问题。 |
所有连接到服务器的代理必须具有唯一的代理名称。
只有具备某些角色的用户才能管理代理。 请查看 这篇文章 以获取更多信息。
对于构建代理配置,请参考 此部分。
一个 TeamCity 代理通过配置为 serverUrl
代理属性的 URL 连接到 TeamCity 服务器。 这被称为单向 agent-to-server (代理到服务器)连接。
代理使用单向代理至服务器连接通过轮询协议:代理建立一个 HTTP(S) 连接到 TeamCity 服务器,并定期轮询服务器以获取服务器命令。
tip
在您 本地安装构建代理后,需要将其 配置并连接到您的 TeamCity 服务器或云实例。 请观看此视频以获取快速指南:
tip
请注意,视频中提到的 Use authentication token... 选项目前只适用于 TeamCity Cloud 实例。
在云中托管 TeamCity 代理允许您实现高度可扩展的解决方案,新代理可以按需启动,当没有构建需要处理时关闭。 有关云托管 TeamCity 代理的更多信息,请参阅 在云中托管构建代理 部分。
当需要时,TeamCity 代理将自动升级。 通常,发生这种情况是因为:
服务器已 升级
请注意,更新代理插件和在服务器升级后接收新文件可能会触发代理重启,以使更改生效。 如果代理在具有 足够权限的用户帐户下运行,所有重启将自动发生,无需您的输入。
TeamCity 采用先进的代理选择逻辑,考虑因素如 CPU 计数、过去的构建性能、代理源(云或本地)等,以便将您的构建与最适合该工作的代理进行匹配。
您可以通过修改其整数 teamcity.agent.priority
属性来手动降低或提高任何代理的优先级。 此属性接受在 -10000
~ 10000
范围内的值,其默认值为 0
。 对于 AWS托管的云代理 ,您可以在云镜像设置页面上设置此属性:

对于其他代理类型,请在 <TeamCity_Agent_Home>/conf/buildAgent.properties文件中添加以下行:
teamcity.agent.priority=54
请注意,TeamCity 仅在代理完全启动并连接到服务器后才会识别代理属性。 因此,非 EC2 云代理的优先级仅适用于活动/运行中的实例。 目前,只有 EC2 云镜像在实例启动之前传递代理优先级。
在代理安装并连接之后,您可以直接从 TeamCity UI 调用此代理的机器的终端。 这项功能让您可以远程查看代理日志,检查已安装的软件,并对特定的代理问题进行调试。
要调用终端,请单击 TeamCity 页眉中的 支持人员 ,选择所需的代理,然后单击 打开终端。

您也可以从 构建结果页面 打开此终端。 在这种情况下,终端会在 checkout directory 中打开,而不是在 $HOME
文件夹中打开。

当终端打开时,您可以单击 在单独的标签页中打开 链接以获得更大的客户端区域。
打开终端 按钮适用于所有类型的代理机器(Linux、Windows 和 macOS),并以启动 TeamCity 代理的同一用户身份调用终端。
为了确保您在进行维护时构建代理处于空闲状态,请禁用它,但不要停止它,因为终端会话需要一个 运行中的 构建代理。 停止构建代理会冻结之前打开的终端标签页,阻止用户输入新的命令。
对于在空闲一段时间后会自动终止的云代理,您可能需要点击 “禁用以进行维护……”按钮,以保持代理的机器运行,并防止其在您仍在调查构建问题时关闭。
tip
打开交互式终端" 链接会在一个单独的面板或浏览器选项卡中
<SERVER-URL>/plugins/teamcity-agent-terminal/agentTerminal.html?agentId:<ID>
URL 打开。 如果您的服务器在 代理服务器后 ,请确保您的代理配置允许 websocket 连接到此页面。
打开终端 链接仅对 角色权限包括 "调用交互式代理终端"权限的用户可见。 应授予此权限给所有与相应 agent 的 代理池 关联的项目。 拥有 "Project Administrator" 和 "System Administrator" 角色的用户默认具有此权限。 作为额外的预防措施,每个打开终端的请求都会作为新的 "Agent actions | Connect to agent" 活动写入 审核日志。
Thanks for your feedback!