在云中托管构建代理
TeamCity 与云端(IaaS)解决方案的集成使 TeamCity 能够按需提供运行 TeamCity 代理的虚拟机。 这使得 TeamCity 可以根据当前的工作负载自动调整活动构建代理的数量。
云代理和执行器
TeamCity 支持两种类型的集成:
常规云代理。 此集成类型使用云托管提供商(如 AWS、Microsoft Azure、Google Cloud 等)作为托管构建代理的环境。 这些代理完全由 TeamCity 控制:构建队列分配、兼容性检查、启动和关闭活动等。
无代理集成。 在此场景中,云提供商充当处理 TeamCity 构建的“承包商”。 TeamCity 服务器将排队的构建发送到“执行器”,并且不会干涉其如何处理此队列。
两种选项均可从 项目设置 | 云端配置文件 页面访问。

常规云代理
可在 将代理添加到项目中 部分下找到。 当前支持的集成包括:
Windows Azure (非捆绑插件)
Google Cloud (非捆绑插件)
由 自定义插件驱动的其他集成。 请查看此 JetBrains Marketplace 页面以获取完整列表。
无代理云执行器
可在 将您的任务卸载到外部代理 部分下找到。 目前,此类云托管提供商集成仅支持 Kubernetes 集群。 我们预计将在未来的发布周期中引入其他集成。
本文档部分主要关注常规云代理。 有关无代理执行器模式的更多信息,请参阅此文章: 执行模式:外部 Kubernetes 集成。
常见信息
对于每个排队的构建,TeamCity 首先尝试在其中一个自托管的代理上启动它。 如果没有可用的,TeamCity 会找到一个与兼容代理匹配的云镜像,并为这个镜像启动一个新的实例。 TeamCity 确保运行的云实例数量不超过限制。
常规云代理集成需要:
一个在您的云端配置好的虚拟机,上面安装了 TeamCity 代理。 它应该被预设为在启动时启动 TeamCity 代理。
在 TeamCity 中配置的 cloud profile。
一旦在 TeamCity 中配置了具有一个或多个镜像的云配置文件,TeamCity 就会为所有新添加的镜像启动一个实例进行测试,以了解它们上配置的代理。 当代理连接时,TeamCity 会存储它们的参数,以便正确处理构建配置到代理的兼容性。 由 TeamCity 启动的云实例连接的代理会自动获得授权,前提是有可用的代理许可证:云代理的数量受到您在 TeamCity 中拥有的代理许可证总数的限制。 之后,该代理被当作常规代理进行处理。
根据配置文件的设置,当 TeamCity 意识到需要更多的代理时,它可以:
启动现有的虚拟机并在构建完成或空闲超时之后停止它。 已停止的机器将被取消分配,因此当代理不活跃时,虚拟机费用不适用。 这种类型的 TeamCity 代理的存储成本仍然适用。
从镜像创建新的虚拟机。 此类机器将会被销毁(在构建完成或空闲超时之后)。 这确保了机器将不再产生任何运行成本。
断开连接的代理将从授权代理列表中移除,并从系统中删除以释放 TeamCity 构建代理许可证。
代理云配置文件和镜像
云配置文件是TeamCity 的一组设置,用于在分发构建队列时按需启动安装了 TeamCity 代理的虚拟机。 云配置文件存储以下常规设置:
连接到云服务提供商所需的凭据。
同时活跃的云代理的最大数量。
规定何时应终止或停止活动代理的条件。
当新的云代理启动时,应传递给它的 TeamCity 服务器 URL。
每个配置文件都有一个或多个 云端镜像 ,用于存储以下设置:
启动的云实例或使用的实例镜像的 ID。
当实例/节点启动时要拉取的容器镜像。
发布后脚本。
应该拥有从此镜像生成的云代理的 代理池。
共享配置文件
在项目中配置的云配置文件也适用于所有子项目。 也就是说,如果您在 <Root project>中配置了一个配置文件,所有的 TeamCity 项目都能够启动新的云代理。
您可以阻止所有或个别子项目使用从父项目继承的云配置文件。 为此,请转到 项目设置 | 云端配置文件 并点击 更改云集成状态。
对于父项目:取消选中 在子项目中启用云集成。
对于子项目:取消选中 在此项目中启用云集成。
TeamCity 云集成设置
这部分描述了云集成所需的一般步骤。
用于 TeamCity 云集成的虚拟机 / 镜像的要求:
为了跳过每个代理连接到服务器时的更新尝试,确保代理是最新的:启动并等待更新完成。 每次在服务器上安装/更新/卸载插件或工具时,代理状态都会发生变化。
buildAgent.properties文件可以保持 "原样"。serverUrl、名称和authorizationToken属性可以保留为空或设置为任意值,TeamCity启动实例时将忽略这些属性。
只要满足这些要求,通常的 TeamCity 代理安装和云提供商镜像捆绑程序都是适用的。
如果您需要服务器和代理机器之间的 连接 是安全的,那么您需要设置代理机器在启动时建立一个安全隧道(例如,VPN)到服务器,以便 TeamCity 代理通过安全通道接收数据。 请注意,TeamCity代理与服务器之间的通信需要在代理和服务器上都打开端口。
准备虚拟机
创建并启动一个安装了所需操作系统的虚拟机。
连接并登录到虚拟机。
配置正在运行的实例:
安装并配置构建代理。
在
buildAgent.properties文件中配置服务器名和代理名——如果 TeamCity 将被配置为启动镜像,这是可选的,但它确实有助于测试代理是否正确配置。通常有必要在
conf / buildAgent.properties中指定tempDir和workDir,以使用非系统驱动器(例如,Windows 下的D驱动器)。
在机器上安装构建所需的任何额外软件(例如,Java 或 .NET)。
启动代理并等待其连接到服务器,确保其正常运行并与所有必要的构建配置兼容(在 TeamCity UI 中,转到 支持人员 页面,选择构建代理并查看 兼容配置 选项卡)。
配置系统,使代理在 机器启动时开始运行 (并确保在机器启动时 TeamCity 服务器可访问)。
检查构建代理将用于从 TeamCity 接收传入数据的端口,并打开所需的防火墙端口(通常为
9090)。
通过重启机器并检查代理是否正常连接到服务器来测试设置。 一旦代理连接,它将自动更新所有的插件。 等待代理完全连接,以便所有插件都下载到代理机器上。
如果您希望 TeamCity 在构建完成或空闲超时后启动现有的虚拟机并停止它,那么上述设置就是您所需要的全部。 如果您希望 TeamCity 从镜像中创建并启动虚拟机,并在使用后终止该机器,则应该从创建的虚拟机中捕获该镜像。
从虚拟机捕获镜像
完成 创建虚拟机的步骤。
在系统中删除任何临时/历史信息。
停止代理(在 Windows 下,停止服务,但保持它在 自动 启动类型)。
(可选)删除 代理主頁中的
logs和temp目录的内容。(可选)清理
<Agent Home>/conf/目录中的平台特定文件。(可选)更改
buildAgent.properties文件以移除名称、serverUrl和authorizationToken属性。
从正在运行的实例中创建一个新的镜像。 请参阅您的云服务提供商的文档,了解如何操作。
配置 Cloud Profile
云配置文件是 TeamCity 用于按需启动安装了 TeamCity 代理的虚拟机的设置集合。 云配置文件在 云配置文件 的 项目设置 部分中配置。 参阅 Amazon EC2、 Kubernetes 和 vSphere 配置文件的详细指南。
估算成本
云服务提供商的定价适用。 请注意,费用可能取决于部署 TeamCity 所实施的具体配置。 我们建议您定期检查您的配置和云帐户数据,以尽早发现并防止意外的费用产生。
请注意,流量大小和所需的服务器和 agent 机器特性大大取决于 TeamCity 的设置和运行构建的性质。
估算流量
以下是一些有助于您估算 TeamCity 相关流量的要点:
如果 TeamCity 服务器并未与代理位于相同的区域或亲和组中,服务器与代理之间的流量将按照您的服务提供商所规定的常规外部流量费用收取。 在估计流量时,请记住 TeamCity 有许多类型的相关流量(请参阅下面的非完全列表)。
由服务器发起的外部连接:
VCS 服务器
电子邮件服务器
Maven 仓库
NuGet 仓库
由服务器发起的内部连接:
TeamCity 代理 (检查状态,发送命令,检索像线程转储等信息,等等)
由代理发起的外部连接:
VCS 服务器(在代理端检出的情况下)
Maven 仓库
NuGet 仓库
任何来自构建过程本身的连接操作
由代理发起的内部连接:
TeamCity 服务器(在服务器端检出或个人构建的情况下获取构建源、下载工件等)
服务器使用的常规连接:
Web 浏览器
IDE 插件
运行成本
云服务提供商根据虚拟机的运行时间来计算费用,因此建议根据您常规构建的持续时间来调整超时设置。 这降低了虚拟机的运行时间。 强烈建议为您的所有构建设置一个执行超时,以防挂起的构建导致超时实例运行但无任何有效载荷。