Har*_*ina 36 continuous-integration jenkins
詹金斯很新,我有一个简单但烦人的问题.当我在Jenkins上运行作业(Build)时,我触发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
Run Code Online (Sandbox Code Playgroud)
基本上它挂起在此输出上,直到构建完成,而不是显示完整输出.有趣的是,这不是一致的行为,有时它的工作原理应该如此.但大多数时候没有实时控制台输出.
詹金斯版本:1.461
dno*_*zay 57
澄清一些答案.
ruby或者python任何合理的脚本语言都会缓冲输出; 这是为了最小化IO; 写入磁盘很慢,写入控制台很慢......flush(),在缓冲区中有足够的数据并对换行符进行特殊处理后,数据会自动生成.例如,在没有换行符的情况下写一个字符串然后sleep()在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()
Run Code Online (Sandbox Code Playgroud)
为ruby,STDOUT.sync = true,接通autoflush上; 所有写入STDOUT后跟flush().这可以解决您的问题,但会导致更多的IO.
STDOUT.sync = true
Run Code Online (Sandbox Code Playgroud)因为python,你可以使用python -u或环境变量PYTHONUNBUFFERED使其stdin/stdout/stout不缓冲,但有其他解决方案不会改变stdin或stderr
export PYTHONUNBUFFERED=1
Run Code Online (Sandbox Code Playgroud)因为perl,你有autoflush
autoflush STDOUT 1;
Run Code Online (Sandbox Code Playgroud)Cra*_*aig 10
确保你的脚本正在刷新stdout,stderr.在我的情况下,我有一个类似于你描述的抛光问题,但我使用的是python.python下面的代码为我修复了它:
import sys
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
我不是Ruby代码,但谷歌揭示了以下内容:
$stdout.flush
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31741 次 |
| 最近记录: |