Ho dovuto scavare nel codice sorgente di trovare la risposta a queste domande in modo Spero che questo aiuta tutti gli altri.
1. In quale contesto viene eseguito lo script?
Lo script viene eseguito all'interno di un groovy.lang.GroovyShell. Questa classe è attualmente dalla libreria di Groovy 1.8.5. ecco un estratto dal codice:
// 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. cosa dovrei tornare dal copione?
Come dimostra il codice precedente, lo script deve restituire una stringa con qualsiasi delimitatore specificato nel parametro o una stringa []. ecco un piccolo estratto della funzione che elabora il valore restituito dallo 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. Qual directory è la CWD dello script? è la variabile di ambiente WORKSPACE?
Ha importanza? È possibile accedere all'area di lavoro variabile di ambiente all'interno dello script utilizza
Map<String, String> props = System.getenv();
def currentDir = props.get('WORKSPACE');
4. v'è un campo aggiuntivo chiamato variabile binding. Come si usa questo?
Questo è un file di proprietà chiave = valore file. questi nomi sono quindi risolvibili nello script groovy.
e.g.
key1=foo
prop2=bar
semplice Groovy one-liner: 'tornare [ "item1", "item2", " etc"]' – MarkHu
provato con il suggerimento sopra ma ha sempre ottenuto un campo vuoto. in realtà quando si utilizza uno "script groovy" nell'area di testo, ho sempre risultati vuoti. – dawez
Aveva lo stesso problema. Vai a 'http: //: scriptApproval /' e approva la voce Classpath '/' –
vehovmar