从TeamCity构建中获取原始构建日志是否可能?

14

如何从TeamCity构建中获取原始构建日志?我编写了一个自定义的测试运行器,作为一条命令行构建步骤运行,并通过将##teamcity...行打印到标准输出来报告测试结果。但是,TeamCity的构建日志似乎会在识别出这些行时将它们过滤掉。我想要查看原始输出以帮助调试我的测试运行器。

更新: 显然这是不可能的。neverov(我假设是JetBrains的Dimitry Neverov?)已经解释了这个问题并给出了一个解决方法,因此我接受了他的答案。

6个回答

13

您可以查看代理程序的/logs目录中的原始输出。这显示了在TeamCity控制台中显示的构建输出上隐藏的未解析数据。

例如:c:\TeamCity-Agent\logs\teamcity-build.log


6
您可以在构建日志页面上点击“下载完整构建日志”来下载它。

在我的TeamCity 6.5.5 (build 18087)中,那不起作用。它似乎提供与网站上构建日志相同的文本。它肯定没有给我##teamcity行。 - Peter Graham
3
原来并不是所有的服务消息都是平等的,而且TeamCity即使在完整的构建日志中也会隐藏一些消息。测试结果消息也被隐藏了。所以唯一调试它的方法是在本地或代理上运行构建脚本。如果输出中有消息,但TeamCity忽略了它们,请发布一个错误报告(bug)。 - neverov
仅供调试目的,如果需要,在2021年之后,您可以尝试使用配置参数 teamcity.internal.build.serviceMessages.logOriginal=true - KIR

2

我看到这个问题很久以前就被问过了(几乎是10年前),但是在TeamCity中什么也没有改变。

我遇到了与测试报告器类似的问题,并找到了一种获取原始日志的方法,而不必连接到构建代理并从那里获取它(可能很困难)。我的解决方案并不涵盖整个构建日志,但在通过Build Steps运行步骤时可能会有所帮助。

所以解决方案是将| tee e2e_raw.log添加到所需的构建步骤脚本中。例如,我们通过运行docker-compose命令在Docker中运行测试: enter image description here

tee将所有输出复制到文件中。原始输出将保持不变,并像往常一样由TeamCity解析。

您还应该在artifacts字段中添加一行,以使构建能够收集新创建的artifact(Build General settings): enter image description here

在此之后,您将在构建步骤的工件选项卡中看到一个新的存档,其中包含此步骤的原始日志: 在此输入图片描述

enter image description here


1

我不太确定你在问题中提到的##teamcity...行是否涉及到这个,但这是我目前在命令行构建步骤中所做的(这是我目前所做的所有工作):

##teamcity[testStarted name='dummyTestName' captureStandardOutput='true']

echo "Do your command-line build steps here."

##teamcity[testFinished name='dummyTestName']

这是一种“hacky”解决方法,但它会导致标准输出/标准错误显示在TeamCity Web UI的构建日志页面上。


1

之前有很好的答案。我要补充的是,您的TeamCity主服务器保存了构建的日志文件,您可以在命令行中获取它们。

请查看<TeamCity数据目录>/system/artifacts/<项目ID>/<构建配置名称>/<内部构建ID>/.teamcity/logs

这对我很重要,因为:

  1. TeamCity代理上的日志会在一天左右被删除,但主服务器上的日志仍然可用。
  2. 我想在计算机本身上使用grep而无需下载多个大型日志文件或使用Web浏览器进行多个页面查看。

-1

在构建日志中有一个选项可以查看“详细/冗长”-它显示所有的服务消息。我从TC9开始就看到了它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接