groovy - jenkins 扩展参数插件 groovy 脚本

标签 groovy jenkins

website for the plugin说您可以创建一个 groovy 脚本来运行以确定参数列表。

这是如何解决的?说明什么也没说。

  • 脚本在什么上下文中运行?
  • 我应该从脚本中返回什么?
  • 脚本的cwd是什么目录?是环境变量WORKSPACE吗?
  • 有一个名为 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. 有一个额外的字段叫做变量绑定(bind)。这是如何使用的?

    这是一个属性文件格式的 key=value 文件。然后这些名称可以在 groovy 脚本中解析。
        e.g.
        key1=foo
        prop2=bar
    

    关于groovy - jenkins 扩展参数插件 groovy 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24730186/

    相关文章:

    java - HTTP Builder/Groovy - 丢失 302(重定向)处理?

    grails - 如何在输入元素的value字段中发送JSon对象

    ios - 持续集成,如何为 QA 和 App Store 发布生成单个构建(二进制)?

    grails - 在Grails中创建域关系会返回无法解决的类错误

    grails - Groovy CSV解析器并导出到数据库

    jenkins - 如何为 Jenkins 管道声明定义工作区体积

    jenkins - 如何通过 HipChat 中的命令触发 jenkins 构建

    jenkins - 如何使用 Jenkins 进行 .NET 构建

    git - Jenkins Pipeline 与 Azure Web 应用程序部署

    gradle - 如何取消引用 Gradle 出版物的集合?