Library for Hudson Sauce OnDemand PlugIn

By Kohsuke Kawaguchi As promised in my earlier post, today I'll talk about the library that does the heavy-lifting for the Hudson Sauce OnDemand plugin. This library is called Sauce REST API, and defines a Java API to access Sauce OnDemand REST API. It's built by Maven, and deployed to Maven2 repository. The library is capable of basic CRUD (create, read, update, and delete) operations over SSH tunnels. To use this library, you create a SauceTunnelFactory instance, then use the CRUD methods defined on it. For example, to set up a tunnel and tear it down, do as follows:

SauceTunnelFactory tunnelFactory = new SauceTunnelFactory();

// create a new tunnel for the intranet host
// wait until the tunnel is ready
SauceTunnel t = tunnelFactory.create("");

// reverse port forwarding so that
// will come to localhost:80

// do something with the tunnel

// destroy the tunnel (and all port forwardings that go with it)

You can also list the current active tunnels, if you'd like to. This lists all the tunnels that belong to your account, not just the ones created by the current process:

for (SauceTunnel t : tunnelFactory.list()) {
    System.out.println(t.getCreationTime()+" "+t.isRunning());

In these examples, you see I didn't pass in the user name and API key explicitly. This is because the library reads the credential from a property file at ~/.sauce-ondemand, which should look like this:


This encourages all the applications that use this library to share the same credential source, which is more convenient for users. Of course, if your application wants to control the credential in its own way, you can use a different overloaded version of the SauceTunnelFactory constructor to pass it in explicitly. The Maven-generated documentation and javadoc are also available. Kohsuke Kawaguchi, the creator of Hudson, wrote the majority of Hudson's core single-handedly. He is a founder of InfraDNA, which provides products, services, and support for Hudson.

Written by

Ashley Wilson


Programming languages