web-dev-qa-db-fra.com

jenkins Extended Paramètre Plugin Script groovy

Le site Web du plug-in indique que vous pouvez créer un script groovy à exécuter pour déterminer la liste des paramètres.

comment cela est-il résolu? Les instructions ne disent rien. 

  1. Dans quel contexte le script est-il exécuté?
  2. Qu'est-ce que je suis censé revenir du script?
  3. Quel répertoire est le cwd du script? s'agit-il de la variable d'environnement WORKSPACE?
  4. il existe un champ supplémentaire appelé variable bindings. Comment est-ce utilisé?
23
coderatchet

J'ai dû creuser dans le code source pour trouver la réponse à ces questions, donc j'espère que cela aidera tout le monde.

1. Dans quel contexte le script est-il exécuté?

Le script est exécuté dans un groovy.lang.GroovyShell. Cette classe est actuellement issue de la bibliothèque Groovy 1.8.5. voici un extrait du code:

// 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. Qu'est-ce que je suis censé revenir du script?

Comme le montre le code ci-dessus, le script doit renvoyer une chaîne avec le délimiteur spécifié dans le paramètre ou dans un tableau String []. Voici un extrait de la fonction qui traite la valeur renvoyée par le 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. Quel répertoire est le cwd du script? s'agit-il de la variable d'environnement WORKSPACE?

Est-ce que ça importe? Vous pouvez accéder à la variable d'environnement WORKSPACE à partir du script à l'aide de

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

4. il existe un champ supplémentaire appelé liaisons variables. Comment est-ce utilisé?

Il s'agit d'un fichier de propriétés formaté clé = valeur. ces noms sont alors résolus dans le script groovy.

    e.g.
    key1=foo
    prop2=bar
25
coderatchet

Pour analyser un objet json (à partir de paramètres) en un objet groovy - Analyser et produire JSON

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