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

TeamCity:如何让浏览器在线查看指定build.number的日志工件而非下载?

解决TeamCity基于build.number的工件链接强制下载问题

问题背景

你遇到的核心问题是:通过TeamCity REST API(基于build.number)访问文本日志工件时,响应头Content-Disposition未包含inline指令,导致浏览器直接下载而非在线查看;而通过build.id的repository/download链接则正常返回inline头。

可行解决方案

方案1:构建时为日志工件指定元数据(推荐)

在构建脚本中,使用TeamCity的服务消息上传日志工件时,直接指定Content-Disposition为inline。这是官方支持的方式,不会影响服务器配置,且TeamCity升级后依然有效。

示例(Shell脚本):

echo "##teamcity[publishArtifacts 'Libtest.Makefile.bld_log.txt;Content-Type=text/plain;Content-Disposition=inline']"

示例(Windows批处理):

echo ##teamcity[publishArtifacts 'Libtest.Makefile.bld_log.txt;Content-Type=text/plain;Content-Disposition=inline']

配置后,该工件无论通过哪种链接访问,都会返回inline响应头,实现在线查看。

方案2:通过反向代理修改响应头(适合无法修改构建脚本的场景)

如果TeamCity部署在反向代理(如Nginx)之后,可在代理层拦截对应请求,修改响应头。

以Nginx为例,添加如下配置:

location ~* ^/app/rest/builds/buildType:.*,number:.*\/artifacts/content\/.*\.bld_log\.txt$ {
    proxy_pass http://teamcity.internal:8111;
    proxy_set_header Host $host;
    # 隐藏原有的Content-Disposition头
    proxy_hide_header Content-Disposition;
    # 从请求路径提取文件名,添加正确的inline头
    if ($request_uri ~* \/([^\/]+)\.bld_log\.txt$) {
        set $filename $1.bld_log.txt;
    }
    add_header Content-Disposition "inline; filename=\"$filename\"";
}

配置生效后,所有匹配路径的请求都会被修改响应头,实现在线查看。

方案3:修改TeamCity服务器配置(不推荐)

直接修改TeamCity的Web应用配置(如web.xml)添加过滤器,强制为文本日志修改响应头。但此方法会在TeamCity升级时丢失配置,且可能影响其他功能,仅作为最后备选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:11:26