Mag*_*nus 17 groovy hudson jenkins
来自类函数的println的输出将丢失.
示例脚本(outputclass.groovy):
class OutputClass
{
OutputClass()
{
println("Inside class") // This will not show in the console
}
}
println("Outside class") // Only this is shown in the console
output = new OutputClass()
Run Code Online (Sandbox Code Playgroud)
我使用Jenkins CLI来执行groovy脚本
java -jar ..\jenkins-cli.jar -s JENKINS_SERVER_URL groovy outputclass.groovy
Run Code Online (Sandbox Code Playgroud)
它只输出这个:
课外
看起来这个类明显地使用来自System.out.println的println,并且System.out被定向到日志文件,但是类外的println正在使用其他东西,它在脚本控制台中输出.以下代码显示了该行为.
System.out.println("First")
println("Second")
Run Code Online (Sandbox Code Playgroud)
输出:
第二
如何显式设置输出设备以输出到Jenkins脚本控制台?
Mag*_*nus 22
我在这里找到了解决方案http://mriet.wordpress.com.
当Groovy插件启动时,会将两个绑定传递给脚本.从绑定中我们可以得到out变量.获取它并使用out.println输出到脚本控制台,而不是普通的println.
下面的脚本显示完整的解决方案
import hudson.model.*
// Get the out variable
def out = getBinding().out;
class OutputClass
{
OutputClass(out) // Have to pass the out variable to the class
{
out.println ("Inside class")
}
}
out.println("Outside class")
output = new OutputClass(out)
Run Code Online (Sandbox Code Playgroud)
如果您使用 skript 作为后期构建步骤(我不确定它是否适用于提到的 CLI),您可以在记录器中使用构建:
manager.listener.logger.println("some output")
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下,这样的事情可能会有所帮助:
class OutputClass
{
OutputClass(logger) // Have to pass the out variable to the class
{
logger.println ("Inside class")
}
}
output = new OutputClass(manager.listener.logger)
Run Code Online (Sandbox Code Playgroud)