TeamCity
Читает версию анонимно из GET /app/rest/server/version, если
credentials не настроены, либо из GET /app/rest/server — точки входа,
на которую первым делом указывает собственный справочник REST API
TeamCity, — если настроен токен.
targets: - id: teamcity-main product: teamcity address: https://teamcity.example.com # credentials: teamcity-pat # опционально, см. нижеАутентификация — необязательна, но если её добавить, её легко перепутать местами
Заголовок раздела «Аутентификация — необязательна, но если её добавить, её легко перепутать местами»Credentials не нужны. TeamCity отдаёт /app/rest/server/version
кому угодно, обычным текстом — 2026.1.1 (build 222577), — даже при
выключенном гостевом входе. Подтверждено на свежих серверах от 2017.2 до
2026.1 без созданного администратора и на семи продакшн-инстансах
(от 2024.03 до 2026.1.3) без credentials. Это не гостевой доступ:
/app/rest/server и эндпоинты только для гостей на тех же серверах
отклоняются. Пока TeamCity запускается, он отвечает на любой путь
HTML-страницей обслуживания с кодом 200, поэтому ответ должен целиком
соответствовать YYYY.N[.N] (build N), иначе таргет падает как
неразбираемый.
Если токен настроен, проба читает вместо этого /app/rest/server —
вы попросили аутентифицированное чтение, там же есть internalId, а
неверный токен остаётся видимой ошибкой авторизации, а не маскируется
анонимным путём. /app/rest/server анонимно никогда не доступен:
свежий инстанс отвечает 401 с вызовами и Basic, и Bearer. У
TeamCity два разных вида токена, подтверждено вживую, и они работают
только как противоположные виды credential:
- Одноразовый bootstrap-токен суперпользователя, который свежий
сервер выводит в лог при первом запуске, работает только как
Basic — пустой username, токен вместо пароля. Отправленный как
обычный
Authorization: Bearer, он отклоняется. - Personal access token обычного пользователя (Profile → Access Tokens — способ, которым реально аутентифицируется долгоживущая автоматизация) — наоборот: подтверждено на семи реальных продакшн-инстансах, он работает как Bearer и однозначно отклоняется как Basic («Incorrect username or password» даже с пустым username).
credentials: # bootstrap-токен — Basic, пустой username teamcity-bootstrap: kind: basic username: "" password: "${TEAMCITY_BOOTSTRAP_TOKEN}"
# personal access token — Bearer teamcity-pat: kind: bearer value: "${TEAMCITY_TOKEN}"Используйте personal access token в любом долгоживущем конфиге — bootstrap-токен предназначен для того, чтобы его отозвали сразу после первого входа.
Записываемые поля
Заголовок раздела «Записываемые поля»version— полная строка, например2026.2 (build 238924)extra.buildNumberextra.internalId— только с токеном (/app/rest/server)
Сопоставление с CVE
Заголовок раздела «Сопоставление с CVE»Сверяется с NVD и БДУ ФСТЭК, если настроен блок cve:.
Резолвер жизненного цикла
Заголовок раздела «Резолвер жизненного цикла»Отсутствует — у endoflife.date нет календаря для TeamCity (подтверждено 404). Пока только инвентаризация.