Jenkins管道-更改已加载脚本的类名称

时间:2018-10-24 14:22:59

标签: jenkins-pipeline

我有一个Jenkins Pipeline项目,该项目load有几个Groovy脚本。当我运行此管道时,詹金斯将这些脚本的类命名为Script1Script2,依此类推。重放构建时将显示这些名称。它们还会出现在异常堆栈跟踪中。我发现这很令人困惑,尤其是当有多个脚本时。

是否可以通过管道或(最好)在脚本本身内设置这些名称?到目前为止,我尝试过处理脚本的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版本的脚本。

2 个答案:

答案 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.groovyScript2.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作为类名-该脚本返回的对象-而不是脚本本身。但是,对我而言,这就足够了。