You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过TeamCity REST API向运行中的构建添加构建制品?

解决方案

要给已经脱离代理但仍在运行的TeamCity构建上传大日志作为制品,你可以直接用TeamCity REST API的构建制品上传端点,具体操作如下:

核心步骤

  1. 定位目标构建
    直接使用你后续用来结束构建的那个构建ID即可,不需要额外查询。如果没有现成ID,也可以用构建号、分支名组合成Locator字符串(比如number:20240501-001,branch:main)来定位。

  2. 构造上传请求
    向TeamCity服务器发送POST请求到以下端点:

    http://<teamcity-server地址>/app/rest/builds/<构建标识>/artifacts/content
    

    其中<构建标识>可以是id:12345(直接指定ID),或者上述的Locator字符串。

  3. 请求认证
    必须带上TeamCity的认证信息:

    • 通用方式:HTTP Basic认证,将用户名:密码做Base64编码后放在Authorization头中,格式为Authorization: Basic <Base64编码字符串>
    • 新版TeamCity(2020.1+):使用令牌认证,格式为Authorization: Bearer <你的令牌>
  4. 上传文件(以curl脚本为例)
    用multipart/form-data格式上传,同时指定文件在TeamCity制品中的存储路径。比如把本地/opt/test-logs/unit-test.log上传到TeamCity制品的test-reports/unit-test.log路径,命令如下:

    curl -u "admin:your-password" -X POST \
      -F "file=@/opt/test-logs/unit-test.log;filename=test-reports/unit-test.log" \
      "http://teamcity.example.com/app/rest/builds/id:12345/artifacts/content"
    

关键注意事项

  • 构建状态要求:构建必须处于运行中状态(即使已脱离代理),务必在调用结束构建的API之前完成上传操作。
  • 大文件优化:如果日志文件过大,可先将其打包成压缩文件上传,TeamCity会自动解压,减少传输量:
    # 打包后上传,自动解压到test-reports目录
    curl -u "admin:your-password" -X POST \
      -F "file=@/opt/test-logs/test-logs.zip;filename=test-reports/" \
      "http://teamcity.example.com/app/rest/builds/id:12345/artifacts/content"
    
    同时需要检查TeamCity服务器的teamcity.max.artifact.size配置,调整允许的最大制品大小。
  • 多文件上传:若需上传多个文件,只需添加多个-F参数,每个参数对应一个文件和目标存储路径。

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:48:30