TeamCity 2026.1.2 与 2025.11.6:一次值得尽快排期的修复升级

2026-07-02 40 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:9 分钟

TeamCity 2026.1.2 和 2025.11.6 已发布,这两个版本都属于错误修复更新。它们不是功能型大版本,但对日常 CI/CD 稳定性很关键:构建停止语义、Perforce 个人构建、AWS 凭证生命周期、S3 bucket 前缀处理等问题,都可能在流水线高频运行时放大成真实事故。

这类小版本为什么不能只看版本号

修复版本容易被团队低估,因为它们通常没有新的 UI、没有新的构建步骤类型,也不会改变你写 Kotlin DSL 的方式。但 CI 系统的风险不在“有没有新功能”,而在“旧流程是否仍然可信”。

这次 2026.1.2 修复了 10 多个问题,摘要里提到的几类尤其值得关注:

  • 从服务器发出停止构建命令时,可能取消本应 always execute 的步骤。
  • agent-side checkout 场景下,unshelving 某些 Perforce changelists 时,个人构建可能失败。
  • AWS 凭证可能提前过期。
  • AWS S3 bucket 前缀相关问题得到修复。

这些问题都有一个共同点:它们不一定每天出现,但一旦出现,排查路径很绕。比如 always execute 步骤通常承载清理、通知、归档日志、释放锁等动作;如果停止构建时它被跳过,失败表象可能不是“构建失败”,而是后续构建被脏工作区、悬挂资源或缺失制品拖垮。

停止构建与 always execute:别让清理步骤变成条件步骤

在 TeamCity 里,很多团队会把清理逻辑放进“始终执行”的步骤:无论测试失败、编译中断,还是人工停止构建,都希望它跑完。此次修复提到“从服务器发出停止构建命令可能会取消始终执行的步骤”,这类问题对长流水线尤其敏感。

可以这样实践:升级前后跑一个最小验证构建,确认人工停止构建后,清理步骤仍然执行。下面是一个可以改造成 TeamCity Command Line build step 的 shell 示例。

#!/usr/bin/env bash
set -euo pipefail

WORKDIR="${WORKDIR:-/tmp/teamcity-stop-test}"
mkdir -p "$WORKDIR"

cleanup() {
  date -Is > "$WORKDIR/cleanup-ran.txt"
  echo "cleanup executed: $WORKDIR/cleanup-ran.txt"
}
trap cleanup EXIT

echo "build started, pid=$$"
echo "Stop this build from TeamCity UI or server API within 60 seconds."
sleep 60

echo "build finished normally"

运行方式:

  1. 新建一个临时 build configuration。
  2. 添加一个 Command Line step,粘贴脚本。
  3. 将该 step 或后续清理 step 配置为 always execute。
  4. 在构建运行时从 TeamCity UI 停止它。
  5. 检查 agent 上是否生成 /tmp/teamcity-stop-test/cleanup-ran.txt,或检查 TeamCity build log 中的清理输出。

如果你的真实流水线里有 Docker 容器清理、临时环境销毁、数据库回滚、测试账号释放等动作,建议把这类验证加入升级验收清单。

Perforce、个人构建与 agent-side checkout 的交叉点

摘要中提到的另一个修复点是:在 agent-side checkout 时,unshelving 某些 Perforce changelists 会导致个人构建失败。

这说明问题发生在几个条件叠加时:

  • 使用 Perforce。
  • 使用 personal build。
  • 使用 agent-side checkout。
  • 构建过程中需要 unshelve changelist。

如果团队依赖 TeamCity 做代码评审前验证,这个修复会影响开发者体验。个人构建失败往往会被误判为代码问题,开发者会在本地重复构建、重新 shelve、换 changelist,最后才怀疑 CI 平台。

可以这样做一个升级前后的冒烟测试:准备一个包含 shelved changelist 的 Perforce 项目,触发一次 personal build,并记录以下信息。

# 在 TeamCity agent 或调试机上记录 Perforce 环境,便于失败时对比
p4 info
p4 changes -s shelved -m 5

# 如果需要验证某个 changelist,请替换 CL_NUMBER
CL_NUMBER=123456
p4 describe -S "$CL_NUMBER"

注意:这不是 TeamCity 官方升级脚本,只是一个可复制的诊断片段。真正的验证应该放在与你们生产 VCS root、checkout mode、agent pool 一致的 TeamCity 配置中。

AWS 凭证与 S3 前缀:CI 里的“偶发失败”常常是时间问题

本次摘要还提到 AWS 凭证提前过期,以及 AWS S3 bucket 前缀相关修复。这类问题对构建制品上传、依赖缓存、测试报告归档、部署包分发都有影响。

升级前可以先收集当前 TeamCity 服务器版本、项目使用的 S3 相关配置位置,以及最近是否出现过类似错误:

#!/usr/bin/env bash
set -euo pipefail

: "${TEAMCITY_URL:?Set TEAMCITY_URL, for example https://teamcity.example.com}"
: "${TEAMCITY_TOKEN:?Set TEAMCITY_TOKEN to a TeamCity access token}"

curl -fsS \
  -H "Authorization: Bearer ${TEAMCITY_TOKEN}" \
  -H "Accept: application/json" \
  "${TEAMCITY_URL%/}/app/rest/server" \
  | python3 -m json.tool

运行前需要设置:

export TEAMCITY_URL="https://teamcity.example.com"
export TEAMCITY_TOKEN="replace-with-a-read-only-token"
./check-teamcity-server.sh

如果你们用 S3 做 artifact storage 或构建缓存,升级验收可以包含一个小文件上传、下载、带前缀路径读取的测试。下面是一个偏通用的 AWS CLI 检查脚本,变量按实际 bucket 和 prefix 修改即可。

#!/usr/bin/env bash
set -euo pipefail

: "${S3_BUCKET:?Set S3_BUCKET}"
: "${S3_PREFIX:=teamcity-upgrade-smoke}"

KEY="${S3_PREFIX%/}/$(date +%Y%m%d-%H%M%S)-smoke.txt"
TMP_FILE="$(mktemp)"

echo "teamcity s3 smoke test $(date -Is)" > "$TMP_FILE"

aws s3 cp "$TMP_FILE" "s3://${S3_BUCKET}/${KEY}"
aws s3 cp "s3://${S3_BUCKET}/${KEY}" -
aws s3 rm "s3://${S3_BUCKET}/${KEY}"

rm -f "$TMP_FILE"

这段脚本不会证明 TeamCity 内部 bug 已经修复,但能帮助你在升级窗口内快速排除 AWS 账号、权限、bucket、prefix、网络出口这些外部变量。

升级建议:把它当作稳定性补丁,而不是例行点版本

如果你已经在 2026.1 或 2025.11 分支上,建议尽快评估 2026.1.2 或 2025.11.6。选择哪个版本取决于你当前所在分支:通常同分支补丁升级的风险更低,也更适合在短维护窗口内完成。

升级前的检查清单可以压缩成几项:

  • 备份 TeamCity server 数据目录和数据库。
  • 记录当前服务器版本、插件列表、agent 数量和关键 build configuration。
  • 挑选 3 到 5 条代表性流水线:普通构建、可停止构建、Perforce personal build、S3 artifact 上传、AWS 凭证相关流程。
  • 在预发或测试 TeamCity 上跑一轮冒烟测试。
  • 升级后观察队列长度、agent 连接、artifact 上传、失败率和构建停止行为。

边界也要说清楚:摘要只说明这些版本修复了若干问题,并点名了部分修复项;它不意味着所有 Perforce、AWS 或 S3 相关失败都会消失。更稳妥的做法是把这次更新作为一次 CI 平台可靠性修补,并用你们自己的流水线覆盖真实风险点。


相关推荐