Introducing Warm Agents, a TeamCity Plugin

TL;DR · AI 摘要
Introducing Warm Agents, a TeamCity Plugin - The JetBrains Blog TeamCity Powerful CI/CD for DevOps-centric teams Follow...
核心要点
- 主题聚焦:Introducing Warm Agents, a TeamCity Plugin
- 来源:The JetBrains Blog,建议结合原文判断细节。
- AI 分析暂不可用,本条为保底评分与摘要。
介绍 Warm Agents,一个 TeamCity 插件 - JetBrains 博客
TeamCity
面向 DevOps 团队的强大 CI/CD 工具
关注
- 关注:
- X X
- YouTube YouTube
- RSS RSS
获取 TeamCity
新闻
版本发布
TeamCity
介绍 Warm Agents,一个 TeamCity 插件
德米特里·科罗文
当您只想运行 PR 测试时,等待“等待启动代理”的提示是一种特别烦人的体验。这种困扰在快速的一分钟构建排队等待十分钟,而那台缓慢的 Windows 云实例却在启动时最为明显。
Warm Agents 插件就是针对这种延迟的解决方案。
通过该插件,TeamCity 会为指定的云镜像维护一定数量的空闲、预启动代理。每当空闲代理数量低于目标值时,TeamCity 会立即创建新的代理,确保构建在到达时立即开始。该插件与 TeamCity 支持的任何云提供商兼容。
唯一需要提前考虑的是预算问题。每个运行中的温代理都会消耗一个构建代理许可证,而空闲的云实例仍然会产生费用。温代理用成本换取延迟,因此请选择一个目标值,反映您实际希望减少的排队时间。
先决条件
- TeamCity 2024.12.3 或更高版本。
- 项目中配置了云配置文件和云镜像。
- 在项目中授予了“管理项目的代理云配置文件”的权限。
- 安装并启用了 Warm Agents 插件。
要开始使用该插件,请前往管理 | 插件,点击浏览插件仓库,在 JetBrains 市场的列表中找到 Warm Agents。安装并启用它。
插件启用后,通过 REST API 调用来配置温代理。本文演示了如何使用 teamcity-cli,这是从终端管理服务器最便捷的方式。如果您更倾向于直接调用端点,请参阅我们的 REST API 快速入门指南和仓库中的示例请求。
设置
要为云镜像准备十个空闲代理,请运行:
teamcity api '/app/<projectExternalID>/<cloudProfileID>/<cloudImageName>/warmAgents?target=10' -X PUT要停止为镜像维护温代理,请设置 target=0。
如果您的云镜像配置了运行代理的硬性上限,TeamCity 会尊重该限制,尽管仍然可以将目标值设置为更高的值。
要验证配置,请调用:
teamcity api '/app/<projectExternalId>/warmAgents?includeSubprojects=<true|false>'或者导航到 项目设置 | 集成 | 温代理:
TeamCity 会监控镜像的空闲代理数量,并在数量低于目标值时启动新实例。请注意,实例是分批启动的,每批之间有短暂的延迟,因此高目标值可能需要一段时间才能填满。
要找到上述使用的 ID,请使用 teamcity-cli 或 REST API:
- teamcity 项目列表
- teamcity 项目云配置文件列表 --project <projectExternalID>
- teamcity 项目云镜像列表 --project --profile 仅使用名称:teamcity-linux-aws-a (lt-0cd4ecf32d77770a9) -> teamcity-linux-aws-a
或者,在服务器上打开云配置文件页面,并从 URL 中读取 ID:在类似 my.teamcity.com/admin/editProject.html 的地址中查找 projectId=My_Project 和 profileId=amazon-123。
高级用法
需求很少会保持平稳。让代理在夜间保持活跃会浪费资源且没有回报,因此该功能适用于频繁变更目标的场景。TeamCity 会动态获取新目标并调整代理数量,通过启动更多或更少的代理来实现。调整目标不会影响已经运行的代理——当您进行缩小时,TeamCity 不会强制停止正在运行的实例。云镜像的“空闲超时”配置仍然有效,尽管 TeamCity 可能会重启一些刚刚关闭的实例以维持代理数量。
一个典型的场景是使用计划任务。配置一个带有计划触发器的构建,使目标在夜间降低并在早上恢复。在 Kotlin DSL 中:
// 定义 warmAgents.token、warmAgents.projectId 等参数...
steps {
script {
scriptContent = """
#!/bin/bash
# 将目标更新为参数值
curl --oauth2-bearer %warmAgents.token% -XPUT ${DslContext.serverUrl}/app/%warmAgents.projectId%/%warmAgents.profileId%/%warmAgents.imageName%/warmAgents?target=%warmAgents.target%
""".trimIndent()
}
}将 warmAgents.token 存储为密码类型参数,以确保构建日志中隐藏该值。触发器配置如下:
// 每天早上将 warm agents 扩展到 2 个的计划触发器
schedule {
branchFilter = "+:*"
triggerBuild = always()
withPendingChangesOnly = false
schedulingPolicy = daily {
hour = 8
}
buildParams {
param("warmAgents.target", "2")
}
}为晚间添加一个目标为 0 的触发器。完整示例请参见此仓库。
昼夜分割是常见场景,但您的工作流程可能需要其他模式。要了解需求实际如何波动,插件会暴露一组小型指标:
teamcity api '/app/projectMetrics?projectId=<projectExternalID>' | grep 'warmAgents'在多节点设置中,添加 X-TeamCity-Node-Id-Cookie=<main-node-id> cookie 可将请求固定到主节点,主节点负责收集指标。
插件会根据配置的云镜像计算利用率和饱和度指标,显示代理的繁忙程度以及它们处理队列的效果。指标以 Prometheus 格式输出,因此您可以随时间抓取这些指标并观察需求高峰。此处提供了一个最小的 Prometheus 配置示例。
请告诉我们您的想法
我们非常想了解该功能对您的使用效果以及您的使用场景。请在下方评论区或原始功能请求页面分享您的反馈,并查看我们的未来改进计划(如果您感兴趣的话)。
plugin
- 分享
上一篇
TeamCity 2026.2.1 和 2026.1.5 已发布