【问题标题】:Getting statistical history from TeamCity API从 TeamCity API 获取统计历史
【发布时间】:2025-11-29 08:00:01
【问题描述】:

TeamCity REST API Documentation看,统计数据的请求是:

http://teamcity:8111/httpAuth/app/rest/builds/<buildLocator>/statistics/ 

哪个有效,然而,它只提供当前构建的统计信息(通过的测试、代码覆盖率、重复的数量等),我正在为我的构建散热器构建一个图表趋势,因此我想要过去一个月的历史数据。

有没有办法从 TeamCity API 获取这些历史统计数据?

【问题讨论】:

    标签: api rest statistics teamcity


    【解决方案1】:

    您可以通过 TeamCity 上的 exportchart 端点获取数据,而不是直接访问数据库。这不是一个记录在案的 API(至少据我所知),但我发现将“类型”查询字符串参数更改为 json 会为您提供 json 数据(而不是默认的 CSV)。您可以通过修改“构建配置”->“统计”选项卡上的下拉菜单来了解有关此端点的更多信息,然后查看用于“将数据下载为 CSV”下载图标/按钮的 URL。

    例如

    http://teamcity/exportchart.html?type=json&buildTypeId=bt2&%40f_range=MONTH&%40filter.status=WARNING&showBranches=true&_graphKey=g&valueType=CodeCoverage&id=CodeCoveragebt2

    据我所知,不允许自定义日期范围。

    (请注意,“bt2”是我系统中的构建配置 ID)

    【讨论】:

    • 有时间我会调查一下,谢谢!
    【解决方案2】:

    要获取一组构建的统计值,因为 TeamCity 8.1 使用TeamCity REST doc 中的请求:

     http://teamcity:8111/app/rest/builds?locator=BUILDS_LOCATOR&fields=build(id,number,status,buildType(id,name,projectName),statistics(property(name,value)))
    

    这基本上会返回匹配 BUILDS_LOCATOR 的构建节点,并在每个节点中“扩展”统计信息。 例如使用“buildType:(id:BUILD_CONFIG_ID)”作为“BUILDS_LOCATOR”从UI配置的ID“BUILD_CONFIG_ID”的构建配置中获取构建。

    【讨论】:

      【解决方案3】:

      很遗憾,我无法仅从 TeamCity API 获取这些数据,因此解决方案是改为使用数据库。

      select 
          build_data_storage.build_id, 
          build_type_mapping.ext_id as 'build_type_id',
          data_storage_dict.value_type_key as 'metric_name', 
          build_data_storage.metric_value,
          history.build_number,
          history.build_finish_time_server
      from 
          build_data_storage
      join 
          data_storage_dict on build_data_storage.metric_id = data_storage_dict.metric_id
      join
          history on build_data_storage.build_id = history.build_id
      join
          build_type_mapping on history.build_type_id = build_type_mapping.int_id
      

      【讨论】:

      • 最好不要直接查询 TeamCity 数据库,因为结构可以从一个 TeamCity 版本更改为另一个版本,因此 JetBrains 基本上不支持这种方法。
      • @Yaegor 这个功能是什么时候添加的?
      • 数据库查询方法实际上应该适用于所有非古代 TeamCity 版本。它可以在未来打破。自 TeamCity 8.1 起,可使用来自另一个答案的 /app/rest/builds/... URL 的 REST API 方法。