How do I import a Groovy class into a Jenkinfile?

24,442

You can return a new instance of the class via the load command and use the object to call "doStuff"

So, you would have this in "Thing.groovy"

class Thing {
   def doStuff() { return "HI" }
}

return new Thing();

And you would have this in your dsl script:

node {
   def thing = load 'Thing.groovy'
   echo thing.doStuff()
}

Which should print "HI" to the console output.

Would this satisfy your requirements?

Share:
24,442
Leonhardt Koepsell
Author by

Leonhardt Koepsell

Updated on May 16, 2020

Comments

  • Leonhardt Koepsell
    Leonhardt Koepsell almost 4 years

    How do I import a Groovy class within a Jenkinsfile? I've tried several approaches but none have worked.

    This is the class I want to import:

    Thing.groovy

    class Thing {
        void doStuff() { ... }
    }
    

    These are things that don't work:

    Jenkinsfile-1

    node {
        load "./Thing.groovy"
    
        def thing = new Thing()
    }
    

    Jenkinsfile-2

    import Thing
    
    node {
        def thing = new Thing()
    }
    

    Jenkinsfile-3

    node {
        evaluate(new File("./Thing.groovy"))
    
        def thing = new Thing()
    }
    
  • Rainer Blessing
    Rainer Blessing almost 7 years
    This works? I get a FileNotFoundException, because in the directory on the Jenkins server there is just Jenkinsfile, but not the classfile which needs to be included.
  • Nauraushaun
    Nauraushaun almost 7 years
    I agree. Correct answer here: stackoverflow.com/questions/43881014/…
  • Nauraushaun
    Nauraushaun almost 7 years
    This does not work if the groovy file lives with your Jenkinsfile. In the Jenkinsfile you may checkout a repo manually and load .groovy files from there. In this case the file is found, but the following is thrown: java.io.NotSerializableException: Thing