通过Jenkins声明性管道访问Groovy类变量

时间:2017-03-02 06:13:40

标签: jenkins groovy jenkins-pipeline

我正在尝试使用Jenkins Declarative Pipleline为我的项目创建管道。作为其中的一部分,我必须在某个文件中编写一些Groovy代码,并且我成功加载它。以下是JenkinsFile的代码片段

stage('Pre-Build'){
        steps{
            script{
                 pipeline = load 'dependencyChecker.groovy'
                 dependents = pipeline.gatherAllDependencies("${base_workspace}/${branch}/${project}/settings.gradle")
                 for (item in dependents){
                    sh "cp --parents ${item} ."
                }
            }
        }

}

以下是groovy文件(dependencyChecker.groovy)

class Test1{

    static def outStream;
        static setOut(PrintStream out){
        outStream = out;
        out.println(outStream);

    }


    static List gatherAllDependencies(String settingsPath){
        List projectDependencies = [];
        computeAllDependencies(settingsPath,projectDependencies);
        return projectDependencies;
    }

    static List computeAllDependencies(String settingsPath,List projectDependencies){
        new File(settingsPath).splitEachLine('='){line ->
            if(line[1]!=null){
                outStream.println("Entire Project Name is ${line[1]}");
                def name = line[1].split('\'');
                if(name.length==3){
                    def dir = name[1];
                    Path path = Paths.get(settingsPath);
                    def dependency = path.getParent().resolve(dir).normalize();
                    outStream.println(dependency);
                    if(!projectDependencies.contains("${dependency}")){
                        projectDependencies.add("${dependency}")
                        if(new File("${dependency}/settings.gradle").exists()){
                            computeAllDependencies("${dependency}/settings.gradle",projectDependencies);
                        }
                    }
                }
            }
        }
    }
}
Test1.setOut(System.out);
return Test1;

更新:

import java.nio.file.*

class Test1 implements Serializable{

    def script;

    Test1(def script){
        this.script = script;
    }

    def gatherAllDependencies(String settingsPath){
        List projectDependencies = [];
        computeAllDependencies(settingsPath,projectDependencies);
        return projectDependencies;
    }

    def computeAllDependencies(String settingsPath,List projectDependencies){
        new File(settingsPath).splitEachLine('='){line ->
            if(line[1]!=null){
                this.script.echo("Entire Project Name is ${line[1]}");
                def name = line[1].split('\'');
                if(name.length==3){
                    def dir = name[1];
                    Path path = Paths.get(settingsPath);
                    def dependency = path.getParent().resolve(dir).normalize();
                    this.script.echo(dependency);
                    if(!projectDependencies.contains("${dependency}")){
                        projectDependencies.add("${dependency}")
                        if(new File("${dependency}/settings.gradle").exists()){
                            computeAllDependencies("${dependency}/settings.gradle",projectDependencies);
                        }
                    }
                }
            }
        }
    }
}
def a =  new Test1(script:this);
return a;
尽管Jenkins脚本控制台中的代码相同,但是

依赖项(在JenkinsFile中)始终为空。我无法调试它,因为我的println语句都没有记录在任何地方

有人可以指导我哪里出错了吗

0 个答案:

没有答案