为 Amazon EC2 设置 TeamCity
TeamCity Amazon EC2 集成使 TeamCity 能够自动缩放其构建资源,根据当前的构建队列工作负载自动启动和停止云托管的代理。
您可以在 TeamCity 中设置各种类型的 EC2 集成。 根据您使用的设置和来源,云端 AWS 托管的代理可以运行在:

从同一Amazon Machine Image(AMI)克隆的多个相同实例。 可以作为按需或Spot 实例启动。
由 TeamCity 管理的单一永久 EC2 实例。 可以在多个 TeamCity 服务器之间共享。
一组从 AWS 请求的Spot 实例(Spot Fleet)。
此部分描述了在 AWS 帐户中必须完成的步骤,然后再在 TeamCity UI 中设置云配置文件。
打开 Amazon EC2 控制台。
创建所需的实例。 参考这些 Amazon 教程以获取更多信息: Linux、 Windows、 macOS。
tip
确切的实例类型(例如,
t2.small
或x1e.xlarge
)并不重要:您可以在 TeamCity 设置中设定所需的类型(请参阅 添加云镜像 部分)。在您的实例上安装代理。 根据操作系统的类型,所需的步骤可能会有所不同。 请参阅这些文章以获取更多信息:
安装运行构建步骤和 TeamCity 代理所需的任何额外软件:JDK 和 JRE、SDK、运行时框架、构建工具如 Git 和 Docker 等等。
tip
在使用 EC2 托管的代理时,您偶尔需要更新相应实例上安装的软件,并重建 AMIs。 否则,连接到您的 TeamCity 服务器的过时云代理将会立即断开连接,并花费一些时间进行工具升级。
为了降低需要定期更新的软件数量,您可以考虑选择容器编排解决方案。 这种方法允许 TeamCity 动态创建拉取带有最新构建工具的 Docker代理镜像 的 pods。
TeamCity 支持与以下解决方案集成:
Kubernetes (包括自托管集群和托管服务,如 Google Cloud GKE 或 Amazon EKS)
运行代理,并确保它成功地连接到您的 TeamCity 服务器,并且与所有所需配置兼容。
将系统配置为在实例启动时 TeamCity 代理。
对于 Windows 实例,请按照以下步骤操作: Windows 代理的额外配置。
重启您的实例,以确保构建代理自动启动并能够连接到服务器。
如果您希望在上一步中创建的实例直接连接到 TeamCity 服务器,并且作为一个独立的代理机器服务,请跳过此部分。 否则,如果您希望 TeamCity 根据当前的工作负载自动调整活动云代理的数量,就从此实例创建一个 AMI。
停止构建代理。 对于 Windows 实例,停止代理服务,但保持其启动类型为 Automatic。
从您的实例中删除所有临时和多余的数据:安装向导、下载的归档文件、构建日志等等。
可选:删除
<agent_home>/log
和<agent_home>/temp
目录。可选:删除
<agent_home>/conf/amazon-*
文件。从
<agent_home>/conf/buildAgent.properties
文件中移除以下属性:名称
— TeamCity 将自动为您的实例分配唯一的名称。serverUrl
— 对于 EC2 集成插件,由于您将在设置云配置文件时为所有实例提供服务器 URL,因此可以安全地删除此属性。 其他插件可能需要此属性存在并设置为正确的值。(可选)
authorizationToken
— 新的云代理会自动获得授权。
停止实例。
在实例的概览页面上,单击 操作 | 镜像和模板 | 创建镜像。
在您创建了所需的实例或 AMI 之后,您可以在 TeamCity UI 中设置云配置文件。
云配置文件 是一组用于 TeamCity 启动虚拟机的通用设置。
导航到所需的项目。 如果您希望此配置文件中的 cloud agents 具有全局可用性,请选择 Root project(根项目)。 个别项目拥有的配置文件可用于生成只能在这些项目中使用的代理。
打开 项目设置并导航到 云配置文件设置选项卡。
单击 创建新配置文件。
将 云类型 设置为“Amazon EC2”。
输入您的个人资料名称和可选描述。
选择一个 AWS 连接 ,用于访问基于 AWS 的镜像和实例。 请注意,“IAM Role”类型的 AWS 连接需要底层连接为访问密钥或默认凭证提供程序链类型才能运行。
note
对于 2024.12 版本之前配置的 EC2 配置文件,TeamCity 将继续支持使用访问密钥和默认凭证提供程序链的传统授权方法。 但是,它将建议将这些设置迁移到单独或现有的 AWS 连接。
2024.12 版本中的新 EC2 配置文件仅支持基于连接的访问。
请选择托管您的实例的 AWS 区域。
设置代理限制。 此数字指定了从此配置文件的所有云镜像创建的代理的总体限制。
指定 TeamCity 服务器 URL。 这个值将自动传递给代理的
buildAgent.properties
文件。 如果未指定,代理将使用 管理 | 全局设置 页面上的相同值。指定一系列准则,用于缩减活跃的云代理。 您可以选择代理程序处于空闲状态的时长,或者他们执行实际构建程序的时间多长。 若满足任何条件,该代理将会被终止,但只会在该代理完成当前构建之后。

云配置文件指定全局设置,例如授权凭据和实例区域。 每个配置文件可以有一个或多个 镜像 ,用于存储与应启动的特定类型云实例相关的设置。 您可以根据需要向个人资料添加尽可能多的图片。 然而,请注意,所有镜像启动的代理总数不能超过在配置文件设置中设定的限制(以及您的许可证所允许的代理数量)。
单击 添加镜像 按钮。
指定可选的镜像名称。
选择所需的镜像类型。
AMI实例Spot Fleet 请求选择 TeamCity 将用来生成相同实例的 AMI。
3.1. 如果您希望 TeamCity 导入并使用特定的 启动模板 ,请选中 使用启动模板 选项。 当服务器上的模板的默认/最新版本更新时,TeamCity会检测到这些变化并更新正在运行的实例。
3.2. 选择所需的 AMI。
自有 AMI — TeamCity 扫描在云配置文件设置中指定的凭证下可用的 AMI 集合。 您可以浏览找到的所有 AMIs,并选择所需的镜像。
通过 ID 的 AMI — 允许您使用 共享 AMI。
通过标签的 AMI — 指定以逗号分隔的 AWS 标签列表,例如
Owner=Mike,Project=Glacier,Subnet=Public
。 如果指定的标签指向多个 AMI,TeamCity 将使用最新创建的 AMI。 如果未找到 AMI,则 支持人员 部分下的镜像名称将为“镜像名称(无数据)”,而不是“镜像名称(ami-xxxxxxxxx)”。
3.3. 指定一个或多个 实例类型。
如果您只需要启动此特定类型的按需或Spot 实例(例如,
t2.medium
),请指定一种类型。 您可以添加多个针对同一AMI的镜像,这些镜像具有不同的实例类型值。 通过这样做,您可以为每种类型设置不同的活动实例限制,并手动启动特定类型的实例。如果您计划订购Spot 实例,请设置多种类型(例如,
t2.small
、t2.medium
和t2.large
)。 这种方法可以增加您获得Spot 实例分配的机会。
note
Mac 实例仅支持
mac1.metal
和mac2.metal
类型,并且仅在 Dedicated Hosts 上以裸机实例的形式提供,最短分配期为24小时,之后才能释放 Dedicated Host。 了解更多: Amazon EC2 Mac 实例。3.4. 可选:指定额外的镜像设置。
IAM 角色 — 所有启动实例将采用的 IAM 角色。 这个角色指定了在您的 EC2 实例上运行的应用程序被授予的权限 granted to applications。 由 TeamCity 使用的 AWS 帐户必须拥有
iam:ListInstanceProfiles
和iam:PassRole
权限,以便使用 IAM 角色。密钥对 — 如果您可能需要 使用 SSH连接到您的 EC2 实例,则为必需。
标签 — 以逗号分隔的实例标签列表。 例如
LaunchedBy=TeamCity,TeamCityCloudProfileName=MyProfile1
。 标记需要ec2:*Tags
权限。 请参阅以下部分获取更多信息: 标签功能。
3.5. 如果您更喜欢更便宜的 现货实例而不是按需实例,请选中 使用竞价实例。 最高价格 字段允许您指定现货实例的最高出价(以美元为单位)。 如果未指定出价,将使用默认的按需价格。
TeamCity 可以根据您的 spot placement scores 自动选择区域或可用区,使您的现货请求最有可能成功。 为了让 TeamCity 请求并使用这些分数,请添加
ec2:GetSpotPlacementScores
IAM 权限。tip
不建议在生产关键的构建中使用 spot 实例,因为 存在 Amazon 意外终止 spot 实例的可能性。 如果 Spot 实例被终止,TeamCity 将以相应的构建问题失败构建,并将此构建重新添加到构建队列中。
3.6. 为您的 EC2 实例指定网络设置。
VPC — 新实例将属于的 虚拟私有云。
子网 — 您的 VPS 的 IP 地址范围。
安全组 — 指定 到(从)您的 EC2 实例的入站和出站连接规则。
Amazon Spot Fleet 允许您根据给定的条件预订常规(按需)和 现货实例的组合。 请参阅以下 AWS 文档文章以获取示例请求: Spot Fleet 示例配置。
3.1. 在 AWS 管理控制台中,转到 实例 | Spot 请求 | 请求 Spot 实例。
3.2 指定所需的 AMI、最小计算单元、可用区以及其他请求详情。
3.3. 单击 JSON 配置 以下载包含现货队列配置参数的 JSON 文件。 请注意,只支持
SpotFleetRequestConfigData
类的字段。3.4. 将生成的 JSON 配置文件粘贴到 TeamCity 中的 Spot Fleet 请求 字段中。
要运行该镜像,TeamCity 将启动与 spot fleet 配置中指定的分配策略匹配的 spot 实例。
note
TeamCity 使用自己的值代替 JSON 配置文件的以下参数:
TerminateInstancesWithExpiration
:false
有效期自
:镜像创建的时间有效直到
:有效期自
值加 5 分钟类型
:请求
warning
目前, LaunchTemplateConfigs 还不支持。 使用 LaunchSpecifications 来描述所需的 Spot 实例。
在 镜像优先级 字段中输入一个介于
-10000
和10000
之间的整数(默认优先级为0
)。 当 TeamCity 需要启动一个新的云代理时,它会选择优先级值最高的镜像。TeamCity 使用优先级值来排序所有现有配置文件的镜像。 例如,新排队的构建可以在从 A 和 B 配置文件生成的云代理上运行。 配置文件 A 有三个镜像,优先级分别为 20 、 40 和 60 。 配置文件B有10、30和50的优先级图片。 TeamCity 将按照以下顺序启动新的代理:
配置文件 A ,镜像优先级 60。
配置文件 B ,镜像优先级 50 。
配置文件 A ,镜像优先级 40 ,等等。
只有当优先级更高的可用镜像达到其活动代理限制时,才使用优先级较低的镜像。
note
镜像优先级 字段的值将分配给从此镜像生成的每个代理的 teamcity.agent.priority属性。 您可以手动为任何其他非 AWS 托管的代理指定此属性,以控制 TeamCity 应优先考虑哪些代理。
设置从此镜像开始的活动云代理的最大数量。 请注意,从所有添加到配置文件的镜像中启动的代理总数不得超过在此配置文件的设置页面上设定的限制。
指定新创建的实例将属于哪个 代理池。
单击 保存 以退出镜像设置页面。
在您配置了一个镜像之后,TeamCity 会为这个镜像启动一个测试代理,以测试它是否可以启动并连接到服务器。 当代理连接并获得授权后,TeamCity 会保存其参数,以正确地将构建分配给兼容的代理。
如果您的镜像已选中 使用竞价实例 设置,并且目前无法启动测试实例(例如,没有可用容量或您的出价过低),TeamCity 将每分钟尝试启动一次现货实例,只要有排队的构建可以在此代理上运行。
当构建进入队列时,TeamCity 首先尝试在常规(非云)代理上运行排队的构建。 如果当前没有可用的,TeamCity会找到一个兼容的云映像,并且(如果尚未达到同时运行实例的限制)启动一个新实例。
您可以从 支持人员 选项卡手动启动和停止云代理。 请注意,如果活动云代理的数量达到配置文件或镜像设置中指定的限制, 启动 按钮将被禁用。

运行中的实例 块显示了从此特定镜像启动的所有代理。
成功启动但尚未连接到 TeamCity 服务器的实例将使用 AWS 实例 ID 作为名称(“i-xxxxxxxxxxxx”)。
已连接和获授权的实例名称由父镜像名称和 AWS 实例 ID 合并而成("Ubuntu-22.04-Large-i-xxxxxxxxxxxx")。
如果已连接的代理报告出现了过时的构建工具,它将自动断开以进行升级。 一旦所有必需的软件都更新了,代理将重新连接到服务器。 TeamCity 会为过时的代理镜像显示相应的警告。
您可以通过 打开终端 按钮打开到任何活动代理实例的 交互式终端。 终端允许您调试和维护您的云代理机器。
托管在 AWS 上的代理报告了几个 系统属性 ,这些属性存储了关于这些机器的 EC2 特定信息,并允许您识别所需的代理。 这些参数中的大多数返回标准 AWS 镜像元数据的值。
- system.ec2.ami-id
如果代理机器是从 Amazon Machine Image 启动的,此属性将返回相应的 AMI ID。
示例:
ami-08b0a7588100450ff
。- system.ec2.ami-launch-index
指示实例启动的 顺序。
示例:
0
- system.ec2.ami-manifest-path
在 Amazon S3 中的 AMI 清单文件路径。 如果您使用基于 Amazon EBS 的 AMI 启动实例,则返回的结果未知。
示例:
(未知)
- system.ec2.instance-id
此实例的 ID。
示例:
i-07a39ee4b882caa3e
- system.ec2.instance-life-cycle
此实例的购买选项。
示例:
spot
- system.ec2.instance-type
实例类型。
示例:
t2.2xlarge
- system.ec2.local-hostname
示例:
ip-10-128-93-39.eu-west-1.compute.internal
- system.ec2.local-ipv4
实例的私有 IPv4 地址。
示例:
10.128.93.39
- 建议的代理名称
公共代理名称,通常为
cloudProfileName-instanceID
格式。示例:
Win-Server-2022-xLarge-i-07a39ee4b882caa3e
- system.ec2.public-hostname
实例的公共 DNS(IPv4)。
示例:
ec2-54-154-113-80.eu-west-1.compute.amazonaws.com
- public-ipv4
公共 IPv4 地址。 如果实例关联了弹性 IP 地址,则返回的值为弹性 IP 地址。
示例:
54.154.113.80
- system.ec2.reservation-id
预订 ID。
示例:
r-0461cf168b52cd309
以下的 Kotlin 片段展示了一个云配置文件的示例 DSL 配置 ,该配置文件使用本地存储的凭证并包含了三个具有不同设置的镜像。
import jetbrains.buildServer.configs.kotlin.*
import jetbrains.buildServer.configs.kotlin.amazonEC2CloudImage
import jetbrains.buildServer.configs.kotlin.amazonEC2CloudProfile
// ...
version = "%product-version%"
project {
vcsRoot(MyRoot)
buildType(Build)
features {
// Image 1: On-Demand Instances for a Specific AMI
amazonEC2CloudImage {
id = "PROJECT_EXT_14"
profileId = "amazon-4"
name = "Ubuntu-22.04-Large(AMI)"
vpcSubnetId = "mySubnet123"
iamProfile = "john-doe-ec2-role"
keyPairName = "john-doe-u2204-key"
instanceType = "t2.large"
securityGroups = listOf("security-group-1")
instanceTags = mapOf(
"LaunchedBy" to "TeamCity"
)
maxInstancesCount = 4
source = Source("ami-1234567890")
}
// Image 2: Spot Instances for an AMI Located by Tags
amazonEC2CloudImage {
id = "PROJECT_EXT_20"
profileId = "amazon-4"
name = "Ubuntu-22.04-Medium-Spot(Tags)"
vpcSubnetId = "mySubnet123"
instanceType = "t3a.medium,t3a.small"
securityGroups = listOf("security-group-1,security-group-2")
useSpotInstances = true
spotInstanceBidPrice = 1.0
instanceTags = mapOf(
"LaunchedBy" to "TeamCity"
)
maxInstancesCount = 4
source = Source("tags")
param("source-tags", "OS=Ubuntu, OSVersion=22.04")
}
// Image 3: A Single EC2 Instance
amazonEC2CloudImage {
id = "PROJECT_EXT_22"
profileId = "amazon-4"
agentPoolId = "-2"
name = "Windows-Server2022(Instance)"
vpcSubnetId = "mySubnet123"
keyPairName = "john-doe-w2022s-keys"
instanceType = "m2.xlarge"
securityGroups = listOf("security-group-1")
source = Source("i-1234567890")
}
// Parent Profile for All Images
amazonEC2CloudProfile {
id = "amazon-4"
name = "AWS EC2 Profile"
description = "A sample Amazon EC2 profile with AMI and Instance images"
serverURL = "https://MyTeamCityBuildFarm.dev.gg"
terminateIdleMinutes = 30
region = AmazonEC2CloudProfile.Regions.EU_WEST_DUBLIN
maxInstancesCount = 20
authType = instanceIAMRole()
param("terminate-after-build", "false")
param("terminateTimeOut_checkbox", "true")
}
}
}
object Build : BuildType({
name = "Build"
allowExternalStatus = true
vcs {
root(MyRoot)
}
steps {
// Build Steps
}
triggers {
vcs {}
}
features {
// Build Features
}
})
object MyRoot : GitVcsRoot({
name = "https://github.com/...#refs/heads/main"
url = "https://github.com/..."
branch = "refs/heads/main"
branchSpec = "refs/heads/*"
authMethod = password {
userName = "JohnDoe"
password = "..."
}
param("oauthProviderId", "PROJECT_EXT_8")
})
TeamCity 需要以下对 Amazon EC2 资源的权限:
ec2:Describe*
ec2:StartInstances
ec2:StopInstances
ec2:TerminateInstances
ec2:RebootInstances
ec2:RunInstances
ec2:ModifyInstanceAttribute
要使用 spot instances ,除了上述列出的权限外,还需要授予以下权限:
ec2:RequestSpotInstances
ec2:CancelSpotInstanceRequests
ec2:GetSpotPlacementScores
(可选,允许 TeamCity 根据他们的 spot placement scores 选择 AWS 区域或可用区)。
要使用 Spot Fleets ,需要以下额外的权限:
ec2:RequestSpotFleet
ec2:DescribeSpotFleetRequests
ec2:CancelSpotFleetRequests
iam:CreateServiceLinkedRole
(如果您收到 "The provided credentials do not have permission to create the service-linked role for EC2 Spot Fleet"错误;一旦服务角色已创建,您可以安全地撤销此权限)
要以假定的 IAM 角色启动实例(适用于从 AMIs 和启动模板克隆的实例),需要以下额外的权限:
iam:ListInstanceProfiles
iam:PassRole
要使用 加密的 EBS 卷 ,需要以下额外的权限:
kms:CreateGrant
kms:Decrypt
kms:DescribeKey
kms:GenerateDataKeyWithoutPlainText
kms:ReEncrypt*
下面的代码片段展示了一个自定义的 IAM 策略定义,允许来自特定 IP 地址的 TeamCity 启动的所有 EC2 操作:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "1",
"Action": [
"ec2:Describe*",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:TerminateInstances",
"ec2:RebootInstances",
"ec2:RunInstances",
"ec2:ModifyInstanceAttribute",
"ec2:*Tags",
"ec2:RequestSpotInstances",
"ec2:CancelSpotInstanceRequests",
"ec2:GetSpotPlacementScores",
"ec2:RequestSpotFleet",
"ec2:DescribeSpotFleetRequests",
"ec2:CancelSpotFleetRequests"
],
"Effect": "Allow",
"Condition": {
"IpAddress": {
"aws:SourceIp": "<TeamCity server IP address>"
}
},
"Resource": "*"
},
{
"Sid": "2",
"Action": [
"kms:CreateGrant",
"kms:Decrypt",
"kms:DescribeKey",
"kms:GenerateDataKeyWithoutPlainText",
"kms:ReEncrypt*"
],
"Effect": "Allow",
"Condition": {
"IpAddress": {
"aws:SourceIp": "<TeamCity server IP address>"
}
},
"Resource": "*"
},
{
"Sid": "3",
"Action": [
"iam:CreateServiceLinkedRole",
"iam:ListInstanceProfiles",
"iam:PassRole"
],
"Effect": "Allow",
"Condition": {
"IpAddress": {
"aws:SourceIp": "<TeamCity server IP address>"
}
},
"Resource": "*"
}
]
}
另请参见: 示例政策(Linux), 示例政策(Windows)。
为了确保 TeamCity 代理 与 EC2 API(包括访问附加驱动器)在 Windows 上的正常通信 ,请在 TeamCity 构建代理 服务上添加一个来自 AmazonSSMAgent 或 EC2Launch / EC2Config 服务的依赖项(该服务确保机器在使用 AWS 基础设施方面完全初始化)。 例如,这可以通过 Registry 或者使用 sc config 来完成(例如, sc config TCBuildAgent depend=EC2Config
)。
或者,您可以使用 "Automatic (delayed start)" 服务启动模式。
EBS optimization 在 TeamCity 中的表现与 EC2 控制台提供的类似。 在配置 Amazon cloud profile 的镜像时,可以使用 Instance Type 对应的框设置优化。 请注意:
EBS 优化默认为
c4.*
、d2.*
和m4.*
(无法配置)打开;EBS 优化默认情况下对于任何其他实例类型均被关闭,可用于支持它的实例(例如
c3.xlarge
)。
以下要求必须由 TeamCity 启动的标记实例满足:
您拥有所有
ec2:*Tags
权限;您的 Amazon EC2 资源的 标签最大数量(50) 尚未达到。
即使没有标记权限,TeamCity 仍然可以启动没有应用标签的 Amazon AMI 和 EBS 镜像,但无法启动 Amazon EC2 竞价实例。
TeamCity 允许用户通过标记创建的实例来获得实例启动信息,标签中包含 teamcity:TeamcityData
和 <服务器 UUID>:-<云配置文件 ID>:-<镜像引用>
。 此标签对于 TeamCity 与 EC2 的整合是必要的,不得删除。
可以将自定义标签应用于 EC2 云代理实例:在配置云配置文件设置时,在 添加镜像/编辑镜像 对话框中使用 实例标签 :字段以 <key1>=<value1>,<key2>=<value2>
格式指定标签。 Amazon 标签限制 需要被考虑。
在标签值中使用等号(=)时,无需进行转义。 例如,字符串 extraParam=name=John
将被解析为 <key=extraParam>
和值 <name=John>.
在启动 Amazon EC2 实例时,TeamCity 会给所有与创建实例相关的资源(例如,卷和网络适配器)打标签,这对于评估实例的总成本(考虑到存储驱动器类型和大小,I/O 操作(对于标准驱动器),网络(传输出),等等)非常重要。
如上文所述 ,TeamCity 会为其启动的每个实例打上 teamcity:TeamcityData
标签,该标签存储有关服务器、云配置文件和源(AMI 或 EBS 实例)的信息。 所以,当几个 TeamCity 服务器试图使用同一个 EBS 实例时,第二个服务器将会看到以下信息:"实例正在被另一个 TeamCity 服务器使用。 无法启动/停止它。 如果您确定没有其他的 TeamCity 服务器正在使用这个实例,您可以删除 teamcity:TeamcityData
标签,此实例将再次对所有 TeamCity 服务器开放。
如果您的 TeamCity 服务器需要使用代理来连接 AWS API 端点,请配置以下服务器 内部属性 以连接到 Amazon AWS 地址。
teamcity.http.proxy.host.ec2
— 代理服务器主机名teamcity.http.proxy.port.ec2
— 代理服务器端口
对于代理服务器验证:
teamcity.http.proxy.user.ec2
— 代理访问用户名teamcity.http.proxy.password.ec2
— 代理访问用户密码
对于 NTLM 认证:
teamcity.http.proxy.domain.ec2
— 用于 NTLM 认证的代理用户域teamcity.http.proxy.workstation.ec2
— 用于 NTLM 认证的代理访问工作站
标准的 Amazon EC2 定价适用。 Amazon 的收费可能取决于部署 TeamCity 所实施的特定配置。 我们建议您定期检查您的配置和 Amazon 帐户数据,以尽早发现并防止意外费用。
请注意,流量大小和必要的服务器及代理机器特性在很大程度上取决于 TeamCity 的设置和运行的构建性质。 参见 估计 TeamCity 的硬件需求。
以下是一些有助于您估算 TeamCity 相关流量的要点:
如果 TeamCity 服务器不位于与 TeamCity EC2 设置中为代理程序配置的相同 EC2 区域或可用区内,则服务器和代理程序之间的流量将按照 Amazon EC2 的通常外部流量费用收费。
在估计流量时,请记住与 TeamCity 相关的流量类型有很多(请参阅下面的不完全列表)。
由服务器发起的外部连接:
VCS 服务器
电子邮件服务器
Maven 仓库
由服务器发起的内部连接:
TeamCity 代理 (检查状态,发送命令,检索像线程转储等信息,等等)
由代理发起的外部连接:
VCS 服务器(在代理端检出的情况下)
Maven 仓库
任何来自构建过程本身的连接操作
由代理发起的内部连接:
TeamCity 服务器(在服务器端检出或个人构建的情况下获取构建源、下载工件等)
由服务器处理的常规连接:
Web 浏览器
IDE 插件
鉴于 Amazon 将某些配置的机器运行时间四舍五入至整小时(在 Amazon EC2 实例小时是如何计费的? 可查看更多信息),请根据您通常的构建长度调整 TeamCity 云集成设置中的 EC2 镜像设置的超时设置。
我们强烈建议为所有构建设置执行超时,以防止构建挂起导致实例长时间运行但无有效负载。
Thanks for your feedback!