在云中托管构建代理
TeamCity 与云端(IaaS)解决方案的集成使 TeamCity 能够按需提供运行 TeamCity 代理的虚拟机。 这使得 TeamCity 可以根据当前的工作负载自动调整活动构建代理的数量。
这个页面包含了如何配置此集成的 一般信息。 要查看当前支持的解决方案列表,请参考 可用的集成。
一般描述
在一个大型的 TeamCity 设置中,有许多项目,可能很难预测构建代理的负载以及需要多少数量的代理才足够。 在配置了云代理集成后,TeamCity 将利用云的弹性提供按需的额外构建代理。
对于每个排队的构建,TeamCity 首先尝试在其中一个自托管的代理上启动它。 如果没有可用的,TeamCity 会找到一个与兼容代理匹配的云镜像,并为这个镜像启动一个新的实例。 TeamCity 确保运行的云实例数量不超过限制。
该集成需要:
一个在您的云端配置好的虚拟机,上面安装了 TeamCity 代理。 它应该被预设为在启动时启动 TeamCity 代理。
在 TeamCity 中配置的 cloud profile。
一旦在 TeamCity 中配置了具有一个或多个镜像的云配置文件,TeamCity 就会为所有新添加的镜像启动一个实例进行测试,以了解它们上配置的代理。 当代理连接时,TeamCity 会存储它们的参数,以便正确处理构建配置到代理的兼容性。 由 TeamCity 启动的云实例连接的代理会自动获得授权,前提是有可用的代理许可证:云代理的数量受到您在 TeamCity 中拥有的代理许可证总数的限制。 之后,该代理被当作常规代理进行处理。
根据配置文件的设置,当 TeamCity 意识到需要更多的代理时,它可以:
启动现有的虚拟机并在构建完成或空闲超时之后停止它。 已停止的机器将被取消分配,因此当代理不活跃时,虚拟机费用不适用。 这种类型的 TeamCity 代理的存储成本仍然适用。
从镜像创建新的虚拟机。 此类机器将会被销毁(在构建完成或空闲超时之后)。 这确保了机器将不再产生任何运行成本。
断开连接的代理将从授权代理列表中移除,并从系统中删除以释放 TeamCity 构建代理许可证。
可用的集成
以下的云解决方案已经得到了开箱即用的支持(查看他们的专 dedicated 文章以获取更多详细信息):
作为非捆绑插件提供:
新的集成可以作为 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 用户界面中,转到 Agents 页面,选择构建代理并查看 Compatible Configurations 选项卡)。
配置系统,使代理在 机器启动时开始运行 (并确保在机器启动时 TeamCity 服务器可访问)。
检查构建代理将用于从 TeamCity 接收传入数据的端口,并打开所需的防火墙端口(通常为
9090
)。
通过重启机器并检查代理是否正常连接到服务器来测试设置。 一旦代理连接,它将自动更新所有的插件。 等待代理完全连接,以便所有插件都下载到代理机器上。
如果您希望 TeamCity 在构建完成或空闲超时后启动现有的虚拟机并停止它,那么上述设置就是您所需要的全部。 如果您希望 TeamCity 从镜像中创建并启动虚拟机,并在使用后终止该机器,则应该从创建的虚拟机中捕获该镜像。
从虚拟机捕获镜像
完成创建虚拟机的步骤。
在系统中删除任何临时/历史信息。
停止代理(在 Windows 下,停止服务,但保持它在 自动 启动类型)。
(可选)删除 agent home 中的
logs
和temp
目录的内容。(可选)清理
<Agent Home>/conf/
目录中的平台特定文件。(可选)更改
buildAgent.properties
文件以移除名称
、serverUrl
和authorizationToken
属性。
从正在运行的实例中创建一个新的镜像。 请参阅您的云服务提供商的文档,了解如何操作。
配置 Cloud Profile
云配置文件是 TeamCity 用于按需启动安装了 TeamCity 代理的虚拟机的设置集合。 云配置文件在 Cloud Profiles 部分的 Project Settings 中配置。 参阅 Amazon EC2、Kubernetes 和 vSphere 配置文件的详细指南。
估算成本
云服务提供商的定价适用。 请注意,费用可能取决于部署 TeamCity 所实施的具体配置。 我们建议您定期检查您的配置和云帐户数据,以尽早发现并防止意外的费用产生。
请注意,流量大小和所需的服务器和 agent 机器特性大大取决于 TeamCity 的设置和运行构建的性质。
估算流量
以下是一些有助于您估算 TeamCity 相关流量的要点:
如果 TeamCity 服务器并未与代理位于相同的区域或亲和组中,服务器与代理之间的流量将按照您的服务提供商所规定的常规外部流量费用收取。 在估计流量时,请记住 TeamCity 有许多类型的相关流量(请参阅下面的非完全列表)。
服务器发起的外部连接:
VCS 服务器
电子邮件服务器
Maven 仓库
NuGet 仓库
服务器发起的内部连接:
TeamCity 代理 (检查状态,发送命令,检索像线程转储等信息,等等)
由代理发起的外部连接:
VCS 服务器(在代理端检出的情况下)
Maven 仓库
NuGet 仓库
任何来自构建过程本身的连接操作
由代理发起的内部连接:
TeamCity 服务器(在服务器端检出或个人构建的情况下获取构建源、下载工件等)
服务器通常使用的连接:
Web 浏览器
IDE 插件
运行成本
云服务提供商根据虚拟机的运行时间来计算费用,因此建议根据您常规构建的持续时间来调整超时设置。 这降低了虚拟机的运行时间。 强烈建议为您的所有构建设置一个执行超时,以防挂起的构建导致超时实例运行但无任何有效载荷。