对詹金斯来说还很新,我有一个简单而烦人的问题。当我在Jenkins上运行作业(构建)时,我触发ruby命令执行我的测试脚本。
问题是Jenkins没有从控制台实时显示输出。这是触发日志。
Building in workspace /var/lib/jenkins/workspace/foo_bar No emails were triggered. [foo_bar] $ /bin/sh -xe /tmp/hudson4042436272524123595.sh + ruby /var/lib/jenkins/test-script.rb
基本上,它会挂在此输出上,直到构建完成为止,而不是仅仅显示完整的输出。有趣的是,这不是一致的行为,有时它可以正常工作。但是大多数时候没有实时控制台输出。
詹金斯版本:1.461
为了澄清一些答案。
ruby
python
flush()
sleep()
sleep
例如,这将等待8秒,打印一行,再等待5秒钟,打印第二行。
from time import sleep def test(): print "ok", time.sleep(3) print "now", time.sleep(5) print "done" time.sleep(5) print "again" test()
为ruby,STDOUT.sync =true打开autoflush;所有写入STDOUT后跟flush()。这样可以解决您的问题,但会导致更多的IO。
STDOUT.sync =true
autoflush
STDOUT
STDOUT.sync = true
对于python,您可以使用python -u或环境变量PYTHONUNBUFFERED来使它stdin/stdout/stout不被缓冲,但是还有其他解决方案不会改变stdin或stderr
python -u
PYTHONUNBUFFERED
stdin/stdout/stout
stdin
stderr
export PYTHONUNBUFFERED=1
对于perl,你有autoflush
perl
autoflush STDOUT 1;