Конвейер Jenkins - изменить имя класса загружаемых скриптов - PullRequest
0 голосов
/ 24 октября 2018

У меня есть проект 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 ed-скриптов.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Может быть, это поможет некоторым пользователям.Случайно мне удалось принудительно задать имя класса сценария при явном создании класса внутри сценария, например:

class MyOwnScriptClass {
    def someClassMember() {
    }
}

return new MyOwnScriptClass()

После load в этом файле он показывает мне MyOwnScriptClass в качестве имени класса - дляобъект, который возвращается этим скриптом, а не сам скрипт.Однако для моих целей этого достаточно.

0 голосов
/ 24 октября 2018

Нет, в настоящее время нет способа изменить сгенерированное имя класса для load ed скрипта.

  • Генерация имени происходит из шага реализации loadкласс 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();
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...