Jenkins管道自定义类 - 对toString()方法的处理不一致

时间:2017-09-01 22:17:31

标签: java jenkins groovy jenkins-pipeline

我有一个Jenkins管道脚本,我在其中创建了一个自定义类来表示AWS AMI。此类扩展java.lang.Object并覆盖java.lang.Object.toString()。显而易见的意图是我可以在创建字符串时直接引用该对象并获得表示该对象的有用字符串。

不幸的是,jenkins-pipeline并没有那么看。很高兴直接尊重对toString()方法的请求,但是没有toString,我的println / echo步骤会被静默删除或产生不一致的输出。

请参阅下面的代码段,了解我所说的内容,以及不同的课程,例如:地图的工作方式与预期完全一致。

此外,代码在Jenkins脚本控制台中完全。但是在jenkins管道工作中,即使Sandbox被禁用了;它没有。

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}")

脚本控制台输出(按预期):

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]

Jenkins Pipeline(Sandbox Disabled)输出(完全出乎意料):

[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

0 个答案:

没有答案