Pain-Free Feature Branch Testing

Posted on Mar 23, 2012

Over time, I've started noticing a trend: as humans we have a great aversion to pain. Okay, that doesn't really make me a master of the human mind, but it's still a starting point. Hearing this, an appropriate response would be suprise: how could it have possibly taken that long for me to come to that realization? I suppose the real issue isn't that people don't like discomfort, but that I'm starting to see the things that people are willing to sacrifice just so they don't have to endure a little overhead now and then.

With Git, one of the biggest benifits that feature branches give us is the ability to test an item in isolation before it has made it back into our main product. In theory this works well. In practice I'm finding that there is a bit of resistance toward actually using them. Why? Discomfort. It's not that creating a feature branch is difficult; it takes a matter of seconds. The real issue comes from the overhead required to stand up a new / fresh install. It isn't a great deal of work that's actually required; it's just a few minutes at the most. It's just that there are SEVERAL tedious steps, none of which a developer actually wants to spend time doing.

This brings me to my project: I'm going to try to automate the process, hopefully blogging along as I make more progress. Eventually, I hope to end up with a system that can automatically detect that a new feature branch has been pushed and create a new build plan / deployment automatically. My requirements aren't exactly trivial and are likely to involve quite a few moving parts. If all goes well though, we should end up with a bit of automation to alliviate our feature branch woes.

Requirements

  • Detect the addition of a new feature branch
  • Clone a plan on our Bamboo server
  • Create a new application in IIS on our test box
  • Create a new database on our database server
  • Update the build script to generate configuration files programatically
  • Add a link to the issue on our Jira server, pointing to the deployed feature branch