TeamCity:写入stderr和stdout时,构建日志中的错误消息顺序

时间:2011-09-12 08:33:41

标签: teamcity stdout stderr

简单的python脚本:

for i in range(0, 5):
  print "ok"
  sys.stderr.write('err\r\n')

在TeamCity(构建步骤)下执行此脚本时,以下输出显示在“构建日志”选项卡中:

ok
err
ok
ok
ok
err
ok
err
err
err

消息完全按随机顺序排列。

请建议如何使消息按照写入输出的顺序进行。

感谢。

3 个答案:

答案 0 :(得分:1)

这是known issue,请注明/投票。

答案 1 :(得分:1)

如果您只想写入stdout和stderr来区分消息和错误,可以尝试使用服务消息:http://confluence.jetbrains.net/display/TCD65/Build+Script+Interaction+with+TeamCity。他们只使用一个频道来区分不同的消息,而且输入顺序不正确。

答案 2 :(得分:0)

这是bash脚本的部分解决方法:

sync() {
  (
    { set +x; } 2> /dev/null # silently disable xtrace
    sleep 0.1 # synchronize stdout and stderr for TeamCity
    "${'$'}@"
    local exit_code=${'$'}?
    sleep 0.1 # synchronize stdout and stderr for TeamCity
    return ${'$'}exit_code
  )
}

现在,您可以至少在重要命令之前和之后同步stdoutstderr

set -x
sync wget http://examples.com/
sync bash myscript.sh arg1 arg2

在此更改之前,TeamCity可以在此命令打印的某些行之后显示打印的bash命令。