Подтвердить что ты не робот

Расширенный параметр расширения jenkins groovy script

На веб-сайте для плагина говорится, что вы можете создать groovy script для определения списка параметров.

как это разрешено? В инструкциях ничего не говорится.

  • В каком контексте выполняется script?
  • Что я должен возвращать из script?
  • Каков каталог cwd script? это переменная среды WORKSPACE?
  • есть дополнительное поле, называемое variable bindings. Как это используется?
4b9b3361

Ответ 1

Мне пришлось вникнуть в исходный код, чтобы найти ответ на эти вопросы, поэтому я надеюсь, что это поможет всем остальным.

1. В каком контексте выполняется script?

script выполняется внутри groovy.lang.GroovyShell. Этот класс в настоящее время находится в библиотеке Groovy 1.8.5. вот отрывок из кода:

// line 419 - 443 of the ExtendedChoiceParamaterDefinition
else if(!StringUtils.isBlank(groovyScript)) {
    try {
        GroovyShell groovyShell = new GroovyShell();
        setBindings(groovyShell, bindings);
        Object groovyValue = groovyShell.evaluate(groovyScript);
        String processedGroovyValue = processGroovyValue(isDefault, groovyValue);
        return processedGroovyValue;
    }
    catch(Exception e) {

    }
}
else if(!StringUtils.isBlank(groovyScriptFile)) {
    try {
        GroovyShell groovyShell = new GroovyShell();
        setBindings(groovyShell, bindings);
        groovyScript = Util.loadFile(new File(groovyScriptFile));
        Object groovyValue = groovyShell.evaluate(groovyScript);
        String processedGroovyValue = processGroovyValue(isDefault, groovyValue);
        return processedGroovyValue;
    }
    catch(Exception e) {

    }
}

2. Что я должен возвращать из script?

Как видно из приведенного выше кода, script должен возвращать строку с любым разделителем, указанным в параметре или массиве String []. здесь приведен фрагмент функции, обрабатывающей значение, возвращаемое из script:

// line 450 - 465 of ExtendedChoiceParameterDefinition
private String processGroovyValue(boolean isDefault, Object groovyValue) {
    String value = null;
    if(groovyValue instanceof String[]) {
        String[] groovyValues = (String[])groovyValue;
        if(!isDefault) {
            value = StringUtils.join((String[])groovyValue, multiSelectDelimiter);
        }
        else if(groovyValues.length > 0) {
            value = groovyValues[0];
        }
    }
    else if(groovyValue instanceof String) {
        value = (String)groovyValue;
    }
    return value;
}

3. Каков каталог cwd script? это переменная среды WORKSPACE?

Это имеет значение? Вы можете получить доступ к переменной среды WORKSPACE из script с помощью

Map<String, String> props = System.getenv();
def currentDir = props.get('WORKSPACE');

4. есть дополнительное поле, называемое переменными привязками. Как это используется?

Это файл с форматированным ключом файла = значение. эти имена затем разрешаются в Groovy script.

    e.g.
    key1=foo
    prop2=bar

Ответ 2

Для объекта parse json (от параметров) до объекта groovy - Разбор и создание JSON

import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText('{ "myList": [4, 8, 15, 16, 23, 42] }')
println(object.myList)