我有一个在Hudson构建系统下运行的构建bash脚本,它编写自己的日志文件。但是,Hudson捕获它执行的构建脚本的所有stdout和stderr,并将其显示为构建的"控制台输出"。此外,此输出保存在构建历史记录中。
如何从脚本本身访问此"控制台输出"?我想1)将它与工件一起保存为日志;2) 将其附加到通知电子邮件中。感谢
- 它与工件(构建目录顶层的
log
文件,即jobs/
jobname/builds/
buildid/log
)一起保存 - 它会自动添加到hudson发送的电子邮件中,尽管从一开始就被截断了
如果你需要在其他地方购买,有两种选择:
-
您可能需要将脚本封装在一个块中,并通过tee将其输出管道化。所以你应该转换:
#!/bin/sh make this make that
至:
#!/bin/bash { make this make that } 2>&1 | tee output # Now the output is in file 'output' while Hudson did see it.
不幸的是,我不知道如何在
tee
中强制行缓冲,所以实时日志打印在Hudson中工作(至少我的cygwin版本没有提到-u
选项)。 -
您可以使用Groovy插件和/或Groovy Postbuild插件来访问内部API。构建步骤中的"系统"groovy脚本和构建后的groovy剧本都可以访问hudson.model.AbstractBuild类型的构建对象(尽管方式略有不同),从中可以使用hudson.model。Run#getLog(int)方法获取控制台的内容。
要在tee中强制行缓冲,只需使用expect
包中的unbuffer {command}
启动程序即可。unbuffer
的另一个替代方案是使用stdbuf -eL -oL {command}