Recently I have been looking into setting up my own build server, having used Cruisecontrol, Hudson, Teamcity in the passed I wanted to give something new a try. With the recent release of Bamboo 3.1.1 I thought I would see what all the fuss is about. I logged onto Atlassian’s site and payed my 10 bucks, which much to my delight and respect, goes to charity.

I then spun up a clean Ubuntu server running 10.04.02, yes old trusty Long Term Support release, and ran through the following steps.

First install the Sun Java development kit, I use this in preference over OpenJDK at the moment for QA as it is what I normally deploy to for customers. To install this package we need to modify the /etc/apt/sources.list and remove the comments at the start of the lines which include the partner repositories. These look as follows

deb http://archive.canonical.com/ubuntu lucid partner
deb-src http://archive.canonical.com/ubuntu lucid partner

Run apt-get to update the cache of packages.

$ sudo apt-get update

Then install the dpkg for Sun\Oracle JDK.

$ sudo apt-get install sun-java-jdk

I will be using PostgreSQL for my database follow the configuration process described in Ubuntu PostgreSQL Installation Howto.

Now create a PostgreSQL user and database, note you will be prompted to enter a password for the bamboo user.

$ sudo -u postgres createuser -R -D -S -P -e bamboo
$ sudo -u postgres createdb -O bamboo bamboo_db

To test this is login will work fine I use the psql command and pass it a hostname to connect to using TCP/IP, this is to ensure our JDBC driver will connect fine.

$ psql -h localhost -U bamboo bamboo_db
Password for user bamboo:
psql (9.0.4)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

bamboo_db=> \q

Install tomcat6 using apt, the reason I am using this package rather than the all in from Atlassian is I like my tomcat maintained. Dumping a tomcat in your OS with no one watching your ass is unwise in my opinion.

$ sudo apt-get install tomcat6

Rather than just popping the war file into /var/lib/tomcat6/webapps, I prefer to externalise the application by extracting the archive into it’s own directory under /var/lib. I then configure tomcat to load the application from this location. This is done so that I can guarantee tomcat upgrade won’t nuke or otherwise disturb my Bamboo installation.

$ sudo mkdir /usr/share/atlassian-bamboo-3.1.1
$ cd /usr/share/atlassian-bamboo-3.1.1
$ sudo jar xvf ~/atlassian-bamboo-3.1.1.war

Before we start ensure tomcat is shut down, otherwise it mite go and deploy bamboo before we are ready!

$ sudo /etc/init.d/tomcat6 stop

Next we need to configure tomcat to use load this web application, to do this we create navigate to the tomcat configuration directory.

$ cd /var/lib/tomcat6/conf/Catalina/localhost

Backup the original ROOT.xml, being careful to preserve the permissions.

$ sudo cp -ipv ROOT.xml ROOT.bak

Edit file named ROOT.xml as root, I will be making my bamboo the ROOT application in this tomcat, in other words served at http://myserver.com/. Put the following content in this file. Note you also need to generate a password for your DB login and enter it where the XXXXXXXX is.

<Context path="/" docBase="/usr/share/atlassian-bamboo-3.1.1">

  <Resource name="jdbc/BambooDS" auth="Container" type="javax.sql.DataSource"
            username="bamboo"
            password="XXXXXXXX"
            driverClassName="org.postgresql.Driver"
            url="jdbc:postgresql://localhost:5432/bamboo_db"
            />

</Context>

Make the ROOT.xml file only readable by the tomcat user to protect the plain text password located within.

$ sudo chmod 600 ROOT.xml

Remove the current root web application from tomcats /var/lib/tomcat6/webapps directory.

$ sudo rm -r /var/lib/tomcat6/webapps/ROOT

Create a data location for bamboo, and change the file permissions so that tomcat6 can write to this location.

$ sudo mkdir /var/lib/atlassian-bamboo
$ sudo chown tomcat6:tomcat6 /var/lib/atlassian-bamboo

Now install the PostgreSQL driver in tomcat, to do this first download it to your home directory then copy it to /usr/share/tomcat6/lib as follows.

$ cd ~/
$ wget http://jdbc.postgresql.org/download/postgresql-9.0-801.jdbc4.jar
$ sudo cp postgresql-9.0-801.jdbc4.jar /usr/share/tomcat6/lib

Modify the /usr/share/atlassian-bamboo-3.1.1/WEB-INF/classes/log4j.properties as root, to correct the location of the log file. This in my opinion needs to be a MUST configure item during there installation process otherwise the log file could end up anywhere, for example the PWD of the executing start up script.

Navigate to the line that looks like this.

log4j.appender.filelog.File=atlassian-bamboo.log

And change it to this.

log4j.appender.filelog.File=${catalina.base}/logs/atlassian-bamboo.log

Also you will need to configure the bamboo.home in /usr/share/atlassian-bamboo-3.1.1/WEB-INF/classes/bamboo-init.properties. This should be changed to the following value. Again this will need to be done as root.

bamboo.home=/var/lib/atlassian-bamboo

Before we start tomcat we need to increase the amount of memory available to tomcat as well as some other params. This is done by editing /etc/default/tomcat6.

Open the file as root and edit to the following line.

JAVA_OPTS="-Djava.awt.headless=true -Xmx128m"

Change it to the following value.

JAVA_OPTS="-server -XX:MaxPermSize=256m -Djava.awt.headless=true -Xmx512m"

Now start tomcat and then tail the server log file.

$ sudo /etc/init.d/tomcat6 start
$ tail -f /var/log/tomcat6/atlassian-bamboo.log

Now open your browser and to http://servername:8080/ and follow the prompts.

When prompted for data base, select use datasource and specify the following value.

java:comp/env/jdbc/BambooDS

Now I have a nice new Atlassian Bamboo server ready to build my software, more on how that goes in future posts.