Apr 22, 2013 Ruby console for Jenkins
We're using Jenkins, we want to create Jenkins plugins and we're looking at using the jenkins.rb project to create those plugins in Ruby. Very exciting technology that was created by Charles Lowell and Jenkins' Kohsuke himself.
Jenkins is written in Java, runs on the JVM, and it wasn't at all obvious how I could "just poke around" a running Jenkins server.
Fortunately, Kohsuke wrote an incredible plugin Pry. Once it is installed, the Jenkins CLI will include a
Say you're running Jenkins server locally, then download the CLI jar file from http://localhost:8080/jnlpJars/jenkins-cli.jar; then run:
$ java -jar jenkins-cli.jar -s http://localhost:8080 pry  pry(Launcher)>
Mapping Jenkins Java to Ruby
You can now navigate around Jenkins.
By default, there is a
jenkins object which represents the Jenkins instance, the root of the object tree. This can also be discovered via
Jenkins.getInstance() within your plugins.
> jenkins => #<Java::HudsonModel::Hudson:0x1251dee1> > Java.jenkins.model.Jenkins.getInstance => #<Java::HudsonModel::Hudson:0x1251dee1>
To see how many items (Projects, etc) you have, you can invoke the
getItems method, with or without a filter class. Remember, when invoking the Java methods to pass Java objects/classes (the
java_class method is helpful here).
> jenkins.getItems.size => 3 > jenkins.getItems.first => #<Java::HudsonModel::FreeStyleProject:0x7e2b2718> > jenkins.getItems(Java.hudson.model.FreeStyleProject.java_class).size => 3
Java.hudson.model.FreeStyleProject maps to the hudson.model.FreeStyleProject class.
Hudson#getItems(javaClass) actually maps to the Jenkins class's method.
There is a lot more to discover but at least you now know how to get into a running Jenkins server and explore the object model!
Full Pry console
The local Ruby console is a fully-enabled Pry console.
Please checkout the Pry website for how you can use and extend Pry!