Jenkins扩展参数插件Groovy脚本

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (217)

大插件网站表示可以创建一个Groovy脚本来运行以确定参数列表。

但这是如何解决的呢?说明什么都没说。

  1. 在什么环境下运行脚本?
  2. 我应该从剧本回来什么?
  3. 脚本的CWD是哪个目录?是环境变量工作区吗?
  4. 有一个额外的字段叫做variable bindings。这是怎么用的?
提问于
用户回答回答于

1.在什么环境下运行脚本?

脚本在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.应该从剧本回来什么?

正如上面的代码所演示的那样,脚本应该返回一个带有参数中指定的任何分隔符的字符串,或者返回一个字符串[]arra.下面是处理从脚本返回的值的函数片段:

// 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是哪个目录?是环境变量工作区吗?

有关系吗?您可以在脚本中访问环境变量工作区。

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

4.有一个额外的字段称为变量绑定。这是怎么用的?

这是一个属性文件格式化的key=value文件。这些名称在groovy脚本中是可解析的。

    e.g.
    key1=foo
    prop2=bar
用户回答回答于

将json对象(从参数)解析为groovy对象

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

扫码关注云+社区