reecetech Bamboo Specs

At reecetech, we use Atlassian Bamboo (henceforth referred to as Bamboo) for our Continuous Integration/Continuous Delivery (CI/CD) platform. We’ve been on Bamboo for around 8 years. While we’re not wild about it, but it integrates well with other Atlassian products, and it works well-enough for us. Here’s how we went from developing our build/deploy plans with ClickOps to Configuration as Code.

About Bamboo

Configuration as Code is cool. Nobody (except Windows admins) likes ClickOps. Sadly for us, Bamboo is very ClickOps-oriented. Before version 6, it was impossible to programmatically create build and deploy plans, which was a huge limitation of the tool.

Enter Bamboo v6.0

Suddenly, there was a way to automate creation of Bamboo plans and specs. Our dreams were realised!

Instead of clicking through a myriad of menus, one could instead…

… write some Yaml that was so limited it was essentially useless… or…

… use the Java API (fortunately very full-featured) that involved writing a Java application, inheriting from a specific parent POM file and deploying the Bamboo plan with Maven…

… wut?

For whatever reason, Atlassian decided that their enterprise customers needed an enterprise solution. And that enterprise solution was Java. (I’m not being hyperbolic - the initial literature from Atlassian said essentially that.)

Don’t get me wrong, I am a Java developer by trade. I like Java. I like Maven (perhaps I have Stockholm Syndrome). Nobody would want to define a build plan in Java. What should be fewer than 20 lines of Yaml becomes in excess of 100 lines of Java. Sure, you can define tests for your pipelines, but who cares?

How do we make this usable?

At reecetech, the Delivery Engineering team (my team) are responsible for the Atlassian stack, and attempt to remain (relatively) current with regards to software updates. In order to justify the (10-15 minutes of) downtime during business hours, we like to advertise new functionality and convince the wider audience that the pain is worth it. So, as part of this upgrade, we posted in our Slack #developers channel that Bamboo could now be used programmatically, not really intending for anybody to use this new functionality (our need for upgrading was to remain current).

Incredibly, one (sadly now former) engineer saw this functionality, saw the limitations, and thought “well… why can’t we make it work like we want it to?”

Enter Bamboo Specs

reecetech Bamboo Specs is a Java application that is designed to allow people to define their Bamboo build and deploy plans (as well as permissions) in Yaml format. It takes a well-defined Yaml file and loads it in to Bamboo’s Java constructs, allowing one to use the fully-developed Java API with a nice, simple, human-readable Yaml format. While the Java code in and of itself is not beautiful, it is quite fully featured and available as an open-source project at github.com/reecetech/bamboo-specs. We would be delighted to receive any feedback, but hopefully this will make using Bamboo slightly less painful.