jenkins扩展参数插件groovy脚本

cod*_*het 27 groovy jenkins

插件网站说您可以创建一个groovy脚本来运行以确定参数列表.

这怎么解决了?说明书没有说什么.

  1. 在什么上下文中运行脚本?
  2. 我应该从脚本中返回什么?
  3. 什么目录是脚本的cwd?它是环境变量WORKSPACE吗?
  4. 有一个额外的字段叫做variable bindings.这是怎么用的?

cod*_*het 30

我不得不深入研究源代码以找到这些问题的答案,所以我希望这有助于其他所有人.

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) {

    }
}
Run Code Online (Sandbox Code Playgroud)

2.我应该从脚本中返回什么?

如上面的代码所示,脚本应返回一个字符串,其中包含您在paramater或String []数组中指定的任何分隔符.这是一个处理脚本返回值的函数片段:

// 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;
}
Run Code Online (Sandbox Code Playgroud)

3.脚本的cwd是什么目录?它是环境变量WORKSPACE吗?

有关系吗?您可以使用脚本在脚本中访问环境变量WORKSPACE

Map<String, String> props = System.getenv();
def currentDir = props.get('WORKSPACE');
Run Code Online (Sandbox Code Playgroud)

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

这是属性文件格式化的key = value文件.这些名称然后可以在groovy脚本中解析.

    e.g.
    key1=foo
    prop2=bar
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,脚本应该放在哪里?我正在尝试从Pipeline Jenkins文件中完成这项工作,到目前为止我通过将脚本的文本内联放置在Jenkins文件中作为变量来工作.当我尝试从外部脚本加载参数的定义时,它似乎不起作用. (3认同)
  • 请添加一个使用此插件和脚本的管道示例 (3认同)
  • 由于此线程似乎是扩展选择参数的 JSON 参数 Groovy 脚本类型如何工作的官方文档,因此我希望看到此参数类型的单个、简单、功能示例。https://plugins.jenkins.io/extended-choice-parameter/ (3认同)
  • 这看起来像我想使用的插件,但关于如何使用的文档实际上为零。我同意我希望看到使用声明性语法的示例。更新:我忘了我的书签中有这个:https://support.cloudbees.com/hc/en-us/articles/115003895271-How-to-do-a-multiselect-input-in-a-pipeline。目前还不清楚,但也许会对某人有所帮助。 (3认同)