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

问题描述 投票:1回答:3

简单的python脚本:

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

在TeamCity下执行此脚本时(构建步骤),在Build Log选项卡中将显示以下输出:

ok
err
ok
ok
ok
err
ok
err
err
err

消息完全错误地随机排列。

[请建议如何使消息按写入输出的顺序排列。

谢谢。

teamcity stdout stderr
3个回答
2
投票

这是known issue,请加注星标/投票。


1
投票

如果只想写stdout和stderr来区分消息和错误,则可以尝试使用服务消息:http://confluence.jetbrains.net/display/TCD65/Build+Script+Interaction+with+TeamCity。他们仅使用一个通道来区分不同的消息,并且不会出现错误的顺序。


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命令。

© www.soinside.com 2019 - 2024. All rights reserved.