Java Jenkins管道自定义类-对toString()方法的处理不一致
我有一个Jenkins管道脚本,在其中我创建了一个自定义类来表示AWS AMI。此类扩展java.lang.Object并重写java.lang.Object.toString()。明显的意图是,我可以在创建字符串时直接引用对象,并获得表示该对象的有用字符串 不幸的是,詹金斯管道并不这么认为。它很乐意直接尊重对toString()方法的请求,但如果没有toString,我的println/echo步骤会被悄悄地删除或产生不一致的输出 请参阅下面的代码片段,了解我所说的内容,以及不同的类(例如Map)如何精确地按预期工作 此外,该代码在Jenkins脚本控制台中工作得非常好。但在jenkins管道作业中,即使沙箱被禁用;事实并非如此Java Jenkins管道自定义类-对toString()方法的处理不一致,java,jenkins,groovy,jenkins-pipeline,Java,Jenkins,Groovy,Jenkins Pipeline,我有一个Jenkins管道脚本,在其中我创建了一个自定义类来表示AWS AMI。此类扩展java.lang.Object并重写java.lang.Object.toString()。明显的意图是,我可以在创建字符串时直接引用对象,并获得表示该对象的有用字符串 不幸的是,詹金斯管道并不这么认为。它很乐意直接尊重对toString()方法的请求,但如果没有toString,我的println/echo步骤会被悄悄地删除或产生不一致的输出 请参阅下面的代码片段,了解我所说的内容,以及不同的类(例如Ma
public class Ami implements Serializable {
private String nodetype
private String id
private String created
private boolean related
private boolean rebuild
Ami(
String nodetype,
String id = 'None',
String created = 'None',
boolean related = false,
boolean rebuild = false
) {
this.nodetype = nodetype
this.id = id
this.created = created
this.related = related
this.rebuild = rebuild
}
@Override
public String toString() {
this.nodetype + '/' + this.id
}
}
Ami newami = new Ami('foo')
println("Concat toString: " + newami.toString())
println("Concat normal: " + newami)
println("Templated toString: ${newami.toString()}")
println("Templated normal: ${newami}")
Map testmap = [:]
testmap = [foo: "bar", snizz: 'snooch']
println("Concat toString: " + testmap.toString())
println("Concat normal: " + testmap)
println("Templated toString: ${testmap.toString()}")
println("Templated normal: ${testmap}")
脚本控制台输出(按预期):
Jenkins管道(沙箱禁用)输出(完全意外):
到底怎么了?您还可以提供管道脚本吗?@daggett问题是管道作业的输出无法打印“Concat normal:foo/None”,而只是打印“foo/None”,并且“Templated normal:foo/None”行被完全跳过,没有输出。从脚本控制台运行时,这些行正常打印。管道脚本是第一个块。首先定义一个类,然后使用该类实例化一个对象,然后8个println步骤演示在不显式调用toString()的情况下打印对象的问题,这对于Map之类的本机类来说不是问题。遇到同样的问题,没有显式“.toString()”的行被完全忽略。仍在寻找解决方案
Concat toString: foo/None
Concat normal: foo/None
Templated toString: foo/None
Templated normal: foo/None
Concat toString: [foo:bar, snizz:snooch]
Concat normal: [foo:bar, snizz:snooch]
Templated toString: [foo:bar, snizz:snooch]
Templated normal: [foo:bar, snizz:snooch]
[Pipeline] echo
Concat toString: foo/None
[Pipeline] echo
foo/None
[Pipeline] echo
Templated toString: foo/None
[Pipeline] echo
Concat toString: [foo:bar, snizz:snooch]
[Pipeline] echo
Concat normal: [foo:bar, snizz:snooch]
[Pipeline] echo
Templated toString: [foo:bar, snizz:snooch]
[Pipeline] echo
Templated normal: [foo:bar, snizz:snooch]
[Pipeline] End of Pipeline
Finished: SUCCESS