Ответ 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