Ivan Kusalic - home page

Using Thoughtworks' Go (Continuous Delivery) With Vagrant

Recently Thoughtworks opensourced their Continuous Delivery product, called Go.

To better understand Go and to enable you to test it freely, I’ve decided to set up a small Vagrant cluster. The project is available on github.

Go (Continuous Delivery)

If you need to set up continuous delivery pipelines, Go is the way to go1. It has easy-to-use and intuitive graphical web interface. The configuration is stored in XML file enabling simple backups (you can automated them with Go itself if you want). You can sanely divide pipelines in groups and manage resources. Documentation is quite nice as well. It’s now free. Most importantly – it gets the job done without evoking killer urges in the users.

To get a better understanding of Go’s capabilities, visit the official Go features page and check out detailed testimonials.

You can download Go here. There is also a repo on github, so check it out.


I’ve already written about Vagrant. It is one of the favorite tools in my toolbox, enabling me to try things out in an isolated and controlled environment. In this project I’ve set a Vagrant cluster consisting of 3 nodes. One node is the Go server node and the other 2 are agent nodes. After you start the cluster with Vagrant and it comes up, you are ready to play with Go.

How to use vagrant-go

Be sure to take a look at the README. It contains detailed instruction on how to install and use vagrant-go.

After the cluster is up, navigate to to access the web interface.

If you are interested in the details of vagrant-go’s implementation, take a look at the Vagrantfile.

There are 2 flags, CONFIGURE_GO_EXAMPLES and INSTALL_DEV_TOOLS, that give you some control over the cluster’s start up process.

When the cluster is up, take a look at the example pipelines and other configurations. The pipelines can be triggered with git push or manually. To do so, push something to test-repo, the local bare git repository created in provisioning process, e.g. git push test-repo master.

All the interaction between the host and VMs is happening through /vagrant directory on VMs that is shared folder for this repository on the host (directory containing the Vagrantfile). This shared directory can be used to produce results that are visible on the host machine too.

The pipelines demonstrate some of the capabilities of Go, e.g. triggering and chaining pipelines or managing artifacts.

Finally, here are some snapshots so you can get some idea how Go looks like.

Pipeline view: Pipelines view

Configuring a pipeline: Pipeline admin

Manually triggering a pipeline with custom input: Triggering a pipeline

Pipeline interconnections: Pipelines graph

Console output: Job console output

For more details, take a look at the pipelines themselves and give vagrant-go a try.


Go is really great Continuous Delivery tool, and you can try it out painlessly with this Vagrant setup. Go and do so. :)

  1. No pun intended.