Automating Atlassian JIRA, Confluence, and Crowd Installation with Chef

As a user, I’ve always been impressed with Atlassian‘s products for software development, issue tracking and documentation. For companies who take these things seriously, JIRA, Greenhopper and Confluence are quickly becoming the go-to products, and with good reason: the products are easy to get started with but have the enterprise features that allow a company to customize workflows as their business changes. I hate to slam open-source products but just try doing what JIRA does with Bugzilla or Trac.

The products themselves, though, can be a nightmare to install, despite the fact that they are mostly just Java web applications living in a WAR file. The products have improved immensely from the days when setting them up involved hacking up a multitude of XML files in WEB-INF (though there still is some of that), and it’s still annoying that Atlassian doesn’t support running the applications as unexploded WARs within Tomcat or another servlet container, probably for the aforementioned reasons. All that aside, though, it’s satisfying when everything is working together and users can single-sign-onto the entire Atlassian suite because of the magic of Crowd, Atlassian’s SSO directory server.

Last week, I released a set of Chef cookbooks I wrote at SecondMarket to ease the installation of the Atlassian tools on a server. I’m still looking to automate more parts of this, including the ability to edit the aforementioned XML files in-place in an idempotent way, so pull requests against our GitHub repo would be welcome.

Special Note on Using Atlassian Products in the Amazon Cloud

I should also mention that my first attempt to set up Atlassian’s products using Amazon Relational Database Service (RDS) as a backing store was a failure. To spare you the pain of finding this out yourself, I’ll just mention the reason: Crowd, JIRA and Confluence expect MySQL to be configured with READ-COMMITTED transaction isolation level, which means you need to configure MySQL to have row-based binary-logging. Unfortunately, binlog_format is not a parameter you can configure in RDS’s DB Parameter Groups, for obvious reasons; it would affect all other clients on that MySQL instance. This has been confirmed with Amazon support, so JIRA/Crowd/Confluence with RDS is a no-go.