2014-07-14 23 views
18

Il website for the plugin dice che è possibile creare uno script groovy da eseguire per determinare l'elenco dei parametri.jenkins extended parameter plugin groovy script

come è risolto? Le istruzioni non dicono nulla.

  1. In quale contesto viene eseguito lo script?
  2. Cosa dovrei tornare dalla sceneggiatura?
  3. Quale directory è la cwd dello script? è la variabile di ambiente WORKSPACE?
  4. c'è un campo aggiuntivo chiamato variable bindings. Come si usa questo?
+2

semplice Groovy one-liner: 'tornare [ "item1", "item2", " etc"]' – MarkHu

+0

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

+0

Aveva lo stesso problema. Vai a 'http: // : scriptApproval /' e approva la voce Classpath '/' – vehovmar

risposta

19

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 
+0

Scusa ma dov'è lo script dovrebbe essere inserito?Sto provando a far funzionare questo lavoro da un Pipeline Jenkinsfile e fino a quel momento a lavorare mettendo il testo dello script in linea, come una variabile nel file Jenkins. Non sembra funzionare quando provo a caricare la definizione del parametro da uno script esterno. – Mig82

+0

Si prega di aggiungere un esempio di una pipeline che utilizza questo plugin con script –

0

per oggetto JSON parse (da parametri) per Groovy oggetto - Parsing and producing JSON

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