我有一个Jenkins Pipeline项目,该项目load
有几个Groovy脚本。当我运行此管道时,詹金斯将这些脚本的类命名为Script1
,Script2
,依此类推。重放构建时将显示这些名称。它们还会出现在异常堆栈跟踪中。我发现这很令人困惑,尤其是当有多个脚本时。
是否可以通过管道或(最好)在脚本本身内设置这些名称?到目前为止,我尝试过处理脚本的metaClass
:
this.metaClass.name = 'Foo' //fails, doesn't find metaClass property
this.class.metaClass.name = 'Foo' //doesn't fail but has no apparent effect
this.class.metaClass.simpleName = 'Foo' //idem
this.class.metaClass.canonicalName = 'Foo' //idem
注意:我很清楚Jenkins共享库。这个问题旨在仅关注load
版本的脚本。
答案 0 :(得分:2)
否,目前无法更改load
版脚本的生成的类名。
名称生成来自the load
step implementation class LoadStepExecution
。
String clazz = execution.getNextScriptName(step.getPath());
在CpsFlowExecution
中,脚本名称是由generateScriptName()
上shell
上的调用CpsGroovyShell
生成的。此调用并删除了.groovy
后缀。
public String getNextScriptName(String path) {
return shell.generateScriptName().replaceFirst("[.]groovy$", "");
}
CpsGroovyShell
生成类名,Script1.groovy
,Script2.groovy
等从中创建。
@Override
protected synchronized String generateScriptName() {
if (execution!=null)
return "Script" + (execution.loadedScripts.size()+1) + ".groovy";
else
return super.generateScriptName();
}
答案 1 :(得分:1)
也许这将对某些用户有所帮助。偶然地,当我在脚本内部显式创建一个类时,我设法强加了该脚本类的名称,例如:
class MyOwnScriptClass {
def someClassMember() {
}
}
return new MyOwnScriptClass()
load
写入文件后,它向我显示MyOwnScriptClass
作为类名-该脚本返回的对象-而不是脚本本身。但是,对我而言,这就足够了。