【问题标题】:Is it possible to get the raw build log from a TeamCity build?是否可以从 TeamCity 构建中获取原始构建日志?
【发布时间】:2012-07-06 10:34:03
【问题描述】:

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

更新: 显然这根本不可能。 neverov(我猜是 JetBrains 的 Dimitry Neverov?)对此进行了解释并给出了解决方法,因此我接受了他的回答。

【问题讨论】:

    标签: teamcity


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这对我使用 TeamCity 6.5.5(内部版本 18087)不起作用。它似乎给出了与网站上的构建日志相同的文本。它绝对没有给我##teamcity 行。
      • 事实证明,并非所有服务消息都是平等的,TeamCity 甚至在完整的构建日志中也隐藏了其中的一些消息。测试结果消息也被隐藏。所以调试它的唯一方法是在本地或代理上运行构建脚本。如果输出中有消息,但 TeamCity 忽略了它们,请发布错误。
      • 以防万一,截至 2021 年,出于调试目的,您可以尝试使用配置参数 teamcity.internal.build.serviceMessages.logOriginal=true
      【解决方案3】:

      当您在问题中提到 ##teamcity... 行时,我无法确定这是否是您在谈论的内容,但这是我目前正在为命令行构建步骤所做的事情(目前我只做):

      ##teamcity[testStarted name='dummyTestName' captureStandardOutput='true']
      
      echo "Do your command-line build steps here."
      
      ##teamcity[testFinished name='dummyTestName']
      

      这是一种 hacky 解决方法,但它会导致在 TeamCity Web UI 的构建日志页面上显示 stdout/stderr。

      【讨论】:

        【解决方案4】:

        我看到这个问题是很久以前(大约 10 年前)提出的,但在 TeamCity 中没有任何变化。

        我遇到了与测试记者类似的问题,并找到了一种无需连接到构建代理并从那里获取原始日志的方法(这可能很困难)。我的解决方案不涵盖整个构建日志,但在通过构建步骤中的自定义脚本运行步骤时会很有帮助。

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

        tee 会将所有输出复制到文件中。原始输出将是相同的,并将由 TeamCity 照常解析。

        您还应该在 artifacts 字段中添加一行,以使 build 能够收集新创建的 artifact(Build General 设置):

        之后,您将在 artifacts 选项卡中看到一个新存档,其中包含此构建步骤的原始日志:

        【讨论】:

          【解决方案5】:

          在我面前有很好的答案。我要补充一点,您的 TeamCity 主机拥有构建的日志文件,您可以在命令行上获取它们。

          看看<TeamCity Data Directory>/system/artifacts/<project ID>/<build configuration name>/<internal_build_id>/.teamcity/logs

          这对我很重要,因为

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-04-19
              • 1970-01-01
              • 2014-10-08
              • 1970-01-01
              相关资源
              最近更新 更多