该插件的网站说,您可以创建一个常规脚本来运行以确定参数列表。
怎么解决呢?指示什么也没说。
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.我应该从脚本中返回什么?
如上面的代码所示,脚本应返回一个字符串,该字符串带有您在参数或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; }
3.脚本的cwd是哪个目录? 是环境变量WORKSPACE吗?
有关系吗?您可以使用以下命令从脚本内访问环境变量WORKSPACE。
Map<String, String> props = System.getenv(); def currentDir = props.get('WORKSPACE');
4.还有一个额外的字段,称为变量绑定。 如何使用?
这是属性文件格式的键=值文件。这些名称然后可以在groovy脚本中解析。
e.g. key1=foo prop2=bar