<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Chris Read &#187; Software</title>
	<atom:link href="http://blog.chris-read.net/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chris-read.net</link>
	<description>He's just this guy, you know...</description>
	<lastBuildDate>Fri, 23 Apr 2010 19:26:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.chris-read.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/e5f05fcdc8a7a74e94f7e2fbe1d71fbe?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Chris Read &#187; Software</title>
		<link>http://blog.chris-read.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.chris-read.net/osd.xml" title="Chris Read" />
	<atom:link rel='hub' href='http://blog.chris-read.net/?pushpress=hub'/>
		<item>
		<title>The End of Buildix</title>
		<link>http://blog.chris-read.net/2009/12/16/the-end-of-buildix/</link>
		<comments>http://blog.chris-read.net/2009/12/16/the-end-of-buildix/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 15:23:24 +0000</pubDate>
		<dc:creator>Chris Read</dc:creator>
				<category><![CDATA[Build]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ci]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.chris-read.net/?p=107</guid>
		<description><![CDATA[I&#8217;ve been putting off this post for a few months now, but I think the time has finally come to admit what I&#8217;m sure people who care have guessed for a while &#8211; active development on Buildix has stopped, and will probably not resume. The site will stay up for the foreseeable future, nothing will [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=107&subd=chrisread&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been putting off this post for a few months now, but I think the time has finally come to admit what I&#8217;m sure people who care have guessed for a while &#8211; active development on <a href="http://buildix.thoughtworks.com" target="_blank">Buildix</a> has stopped, and will probably not resume. The site will stay up for the foreseeable future, nothing will vanish, but nothing new will be added either.</p>
<p>We started the project because at the time, setting up a new Continuous Integration server was quite an arduous task. The only real option out there for a Java project was <a href="http://cruisecontrol.sf.net" target="_blank">CruiseControl</a>, and it could take a new developer days to get their first build through the system. Thankfully though this is no longer the case.</p>
<p>Since then the whole CI landscape has changed. Just having a single &#8220;build server&#8221; is now more the exception than the rule. It&#8217;s all about build farms these days using tools like <a href="http://www.thoughtworks-studios.com/cruise-release-management" target="_blank">Cruise</a>, <a href="http://hudson-ci.org/" target="_blank">Hudson</a> and <a href="http://www.jetbrains.com/teamcity/" target="_blank">TeamCity</a>. They integrate nicely with a variety of SCM&#8217;s and story tracking tools. Setting up a build environment with these tools is really easy now. I&#8217;d like to think that Buildix at least had something to do with helping people to see how easy it could be to get a CI environment up and running, and I know that at least in the case of Cruise this is true because I&#8217;ve been part of that team.</p>
<p>So &#8211; thank you to all of you who used Buildix and liked it and provided feedback. Thank you also to the current big players in the CI field who put effort into making sure that looking after your CI environment no longer needs to be a full time job for someone.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chrisread.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chrisread.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chrisread.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chrisread.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chrisread.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chrisread.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chrisread.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chrisread.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chrisread.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chrisread.wordpress.com/107/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=107&subd=chrisread&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chris-read.net/2009/12/16/the-end-of-buildix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Chris Read</media:title>
		</media:content>
	</item>
		<item>
		<title>Report back from DevOpsDays 2009</title>
		<link>http://blog.chris-read.net/2009/11/24/report-back-from-devopsdays-2009/</link>
		<comments>http://blog.chris-read.net/2009/11/24/report-back-from-devopsdays-2009/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 10:27:26 +0000</pubDate>
		<dc:creator>Chris Read</dc:creator>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[agile sysadmin]]></category>
		<category><![CDATA[Config Management]]></category>
		<category><![CDATA[talks]]></category>

		<guid isPermaLink="false">http://blog.chris-read.net/?p=100</guid>
		<description><![CDATA[A few months ago I got an email from Patrick Debois who I&#8217;d met at CITCON Europe asking if I&#8217;d be interested in speaking at the first conference aimed at System Administrators practising/interested in/sceptical about Agile. One of the key beliefs of those of us doing this already is that Agile practices are generally too [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=100&subd=chrisread&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>A few months ago I got an email from <a href="http://www.jedi.be/about/" target="_blank">Patrick Debois</a> who I&#8217;d met at <a href="http://www.citconf.com/" target="_blank">CITCON</a> Europe asking if I&#8217;d be interested in speaking at the first conference aimed at System Administrators practising/interested in/sceptical about Agile. One of the key beliefs of those of us doing this already is that Agile practices are generally too narrowly focussed in their implementation. At the moment it&#8217;s primarily the Development organization who drive its adoption, but to get the most benefit Development and Operations groups within an organization need to work together.</p>
<p>With this in mind it was decided to call the conference <a href="http://www.devopsdays.org/" target="_blank">DevOpsDays</a>. Videos of the talks will be online in the archives section soon, so I&#8217;ve decided to write down my thoughts about what went well and not so well &#8211; I am a fan of retrospectives.<br />
<span id="more-100"></span><br />
<strong>What Went Well</strong></p>
<p>The conference was in Ghent, a city in Belgium, and as expected had quite a heavy European contingent. It was not not exclusively so though, as <a href="http://reductivelabs.com/" target="_blank">Reductive Labs</a> and <a href="http://www.canonical.com/" target="_blank">Canonical</a> both sent representatives over from the USA, and one of the speakers is an Aussie who just happened to be back packing around Europe at the time. One of my first great learnings though was that there are about 10 of us in the greater London area who are doing this kind of thing (2 of them ex-TWers) so we&#8217;ve started meeting regularly and exchanging ideas.</p>
<p>As there was such a large concentration of us around London, we&#8217;ve decided to try and subvert one of the London Geek Nights as a DevOps night to try and spread the word to more Devs. I&#8217;ll probably make more noise about it here when we&#8217;ve got dates confirmed.</p>
<p>The next great thing I loved was the format. It was split up into talks in the morning, with Open Spaces in the afternoon, over 2 days. This format actually worked very well as many of the open space sessions were inspired by the talks. Another interesting mix was that there was an even split between talks on tools and talks on practices.</p>
<p>I also discovered some great tools! Here&#8217;s a brief list of ones I liked the most:</p>
<ul>
<li><a href="http://code.google.com/p/mcollective/" target="_blank">The Marionette Collective</a> &#8211; using a message bus to administer 100&#8242;s of servers using pub/sub topics. You&#8217;ve got to watch the video to appreciate the full awesomeness.</li>
<li><a href="http://auxesis.github.com/cucumber-nagios/" target="_blank">Cucumber-Nagios</a> &#8211; writing tests to monitor your system using Cucumber, and then formatting the results as a Nagios plugin so you can easily wire it in to your monitoring system.</li>
<li><a href="http://flapjack-project.com/" target="_blank">Flapjack</a> &#8211; another example of interesting use of a message bus. This time to parallelize the monitoring of 100&#8242;s of servers. I&#8217;m not sure I totally agree with the approach, but what really blew me away was they way they do graphing and reporting. It&#8217;s very impressive.</li>
<li><a href="http://collectd.org/" target="_blank">collectd</a> &#8211; collectd gathers statistics about the system it is running on and stores this information in RRD databases. One of the things I really like about this though is that there are plugins for it like <a href="http://support.hyperic.com/display/hypcomm/jcollectd" target="_blank">Jcollectd</a> which requires no code changes. Simply plug it into your classpath and it registers a JMX MBean that pumps data from your JVM to collectd (I think). I&#8217;ve not tried it in production yet though&#8230;</li>
</ul>
<p>Overall the conference was very well received, and I&#8217;m looking forward to next years instalment. There&#8217;s a lot of talk about doing a North American version&#8230;</p>
<p><strong>Not So Well<br />
</strong><br />
As we all know, the best bits about Away Days/Conferences are the talks in the hall between sessions. The problem with the program was that we barely had enough time for bio breaks between sessions, and everyone was quite burned out at the end of day two (not just because of the Belgian Beer). I think it&#8217;s a pretty easy thing to fix though and considering that it was the first conference of its type there&#8217;s bound to be some fine tuning required.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chrisread.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chrisread.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chrisread.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chrisread.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chrisread.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chrisread.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chrisread.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chrisread.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chrisread.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chrisread.wordpress.com/100/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=100&subd=chrisread&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chris-read.net/2009/11/24/report-back-from-devopsdays-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Chris Read</media:title>
		</media:content>
	</item>
		<item>
		<title>Self Identifying Software</title>
		<link>http://blog.chris-read.net/2009/09/22/self-identifying-software/</link>
		<comments>http://blog.chris-read.net/2009/09/22/self-identifying-software/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 17:09:41 +0000</pubDate>
		<dc:creator>Chris Read</dc:creator>
				<category><![CDATA[Build]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Config Management]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Continuous Deployment]]></category>
		<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://blog.chris-read.net/?p=91</guid>
		<description><![CDATA[How often has someone come up to you and asked you what build of your software is currently deployed in a specific environment? How many times have you come across a .jar or .dll file and wondered what version it is? Especially when using Open Source Software? The most frightening one for me is when [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=91&subd=chrisread&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>How often has someone come up to you and asked you what build of your software is currently deployed in a specific environment?</p>
<p>How many times have you come across a <em>.jar</em> or <em>.dll</em> file and wondered what version it is? Especially when using Open Source Software?</p>
<p>The most frightening one for me is when I&#8217;ve looked at a cluster of production servers and noticed that the <em>.war</em> file for the application deployed on it is a different size on one of the nodes. Which one was the correct one to deploy? Luckily this happened to me a long time ago, but I know that people out there are still having this problem today.</p>
<p>The solution is what I call <em>&#8220;Self Identifying Software&#8221;</em>. Every build of your software needs to have something that tells you what version it is and how to get back to the source code that created it. Having a build label or release number visible in your application is a good start, but it does not make your software <em>Self Identifying</em>. Product companies have been doing this for ever. The problem is that for that number to be useful (particularly when you&#8217;re trying to access the source code to reproduce and fix a bug) you then need to refer to a build system or release notes to find out where the source code came from (if you&#8217;re lucky). It often also does not apply to development builds. To be truly <em>Self Identifying</em> you need to make sure that <em><span style="text-decoration:underline;"><strong>every</strong></span></em> build (including builds developers create on their workstations) also includes enough information from the SCM system so that anyone who has access to the source code can go right back to the exact source code that produced that binary. For example, if you use Subversion as your SCM then this will be a URL and a revision number.</p>
<p>This is not exactly a new concept, it&#8217;s something I (and others) have been doing for a number of years now. The reason I&#8217;ve decided to write about it now though is that recently I was showing a new guy around one of the projects I&#8217;m working on at the moment, and when I showed him how to determine which version of the app was deployed he was delighted.<br />
<span id="more-91"></span></p>
<h2>How do I get my software to identify itself?</h2>
<p>There are generally two scenarios where I would want to get the identity of some software. The first is where I have a service or system running somewhere that I would like to know the version of, and the second is where I have a binary artefact and I&#8217;m trying to determine it&#8217;s provenance.</p>
<p>When querying a service, the easiest is to be able to hit a well known URL (or make a well known service call) that tells me what I need to know. What the exact URL or service call is is not important, as long as those who need it know how to invoke it. This is most useful then you don&#8217;t actually have access to the binaries that power the service.</p>
<p>However, if you do have access to the binaries then it&#8217;s usually easiest just to examine the meta data of the file to see where it came from. Most modern binary formats allow for this in some way. If you&#8217;re working with Java then all <em>.jar</em>, <em>.war</em> and <em>.ear</em> files allow you to put this into the <em>META-INF/MANIFEST.MF</em> file. Creative use of <em>versioninfo</em> resources will allow you to achieve similar results if you&#8217;re dealing with Windows. Note that we&#8217;re not talking about putting this information into the file name itself &#8211; file names change.</p>
<h2>How do I use it?</h2>
<p>Having <em>Self Identifying Software</em> goes beyond just being able to quickly track down the source code that built the binaries you&#8217;re dealing with. Here are a few other uses I&#8217;ve found:</p>
<ul>
<li>When used as part of a Continuous Deployment system you can verify that you&#8217;ve got the correct version of the binaries before you start deploying things, and you can then use the service call to verify that the correct version of the app is up and running at the end of the deployment processes.</li>
<li>When used as part of a dynamic system dashboard you can quickly and easily see what&#8217;s installed where instead of relying on spreadsheets or documents that often get forgotten.</li>
</ul>
<p>If you find any more, please let me know&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chrisread.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chrisread.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chrisread.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chrisread.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chrisread.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chrisread.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chrisread.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chrisread.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chrisread.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chrisread.wordpress.com/91/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=91&subd=chrisread&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chris-read.net/2009/09/22/self-identifying-software/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Chris Read</media:title>
		</media:content>
	</item>
		<item>
		<title>Real Clouds Don&#8217;t Have Logos</title>
		<link>http://blog.chris-read.net/2009/04/28/real-clouds-dont-have-logos/</link>
		<comments>http://blog.chris-read.net/2009/04/28/real-clouds-dont-have-logos/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 17:06:51 +0000</pubDate>
		<dc:creator>Chris Read</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[cloud]]></category>

		<guid isPermaLink="false">http://blog.chris-read.net/?p=85</guid>
		<description><![CDATA[I&#8217;ve been doing even more reading than normal lately on the subject of Clouds lately as quite a few of us within ThoughtWorks who are going to be speaking on the subject next month are comparing notes. It follows that when I clicked the link for &#8220;The Wrong Cloud&#8221; I was not actually prepared for [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=85&subd=chrisread&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been doing even more reading than normal lately on the subject of Clouds lately as quite a few of us within ThoughtWorks who are going to be speaking on the subject next month are comparing notes. It follows that when I clicked the link for &#8220;<a href="http://www.maya.com/the-feed/the-wrong-cloud" target="_blank">The Wrong Cloud</a>&#8221; I was not actually prepared for a delightfully entertaining <a href="http://www.maya.com/file_download/126/The%20Wrong%20Cloud.pdf" target="_blank">paper</a> that would contain my quote of the day:</p>
<p><em>&#8220;Today’s so-called cloud isn’t really a cloud at all. It’s a bunch of corporate dirigibles painted to look like clouds. You can tell they’re fake because they all have logos on them. Real clouds don’t have logos.&#8221;</em></p>
<p>As much as I enjoyed reading their paper, I must say that I disagree with a lot of what the guys at Maya are saying. Yes, there is a large dose of spin and hand wavey magic going on with the current leading fashion trend (that bit is totally true). Yes, it is very easy to tightly couple your application to a cloud vendor. The thing is though that it&#8217;s not that different from the tie in you get when selecting what language you use to develop your application in, which third party libraries you use or even what operating system(s) to target. The only real difference I can think of is that if for some reason the cloud vendor you&#8217;re backing stops running your app goes down, unlike all those mission critical OS/2 applications that are still running out there&#8230;</p>
<p>I&#8217;m pretty sure that you&#8217;d have fair warning before the plug was pulled though, especially if you&#8217;re still paying them money every month for their services.</p>
<p>The real questions you need to ask before doing anything on any cloud service are:</p>
<ol>
<li>What is the problem I&#8217;m trying to solve?</li>
<li>Do any of the cloudy offerings actually help me solve that problem?</li>
<li>What is the cost difference between deploying this app in the cloud vs our own infrastructure (assuming you have any of your own)?</li>
<li>What is the point at which that will change? Is there a usage point where it would be cheaper for me to move off the cloud?</li>
<li>If I chose platform X, how hard will it be to move to platform Y?</li>
</ol>
<p>Cloud is not a magic silver bullet &#8211; such things don&#8217;t exist. As with any technology choice you make, you need to select the most cost effective one for the problem you have, and try your hardest to ignore the FUD.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chrisread.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chrisread.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chrisread.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chrisread.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chrisread.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chrisread.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chrisread.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chrisread.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chrisread.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chrisread.wordpress.com/85/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=85&subd=chrisread&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chris-read.net/2009/04/28/real-clouds-dont-have-logos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Chris Read</media:title>
		</media:content>
	</item>
		<item>
		<title>Podcast on Continuous Integration available</title>
		<link>http://blog.chris-read.net/2009/04/27/podcast-on-continuous-integration-available/</link>
		<comments>http://blog.chris-read.net/2009/04/27/podcast-on-continuous-integration-available/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 08:57:04 +0000</pubDate>
		<dc:creator>Chris Read</dc:creator>
				<category><![CDATA[Build]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ci]]></category>
		<category><![CDATA[jaoo]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[talks]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.chris-read.net/?p=77</guid>
		<description><![CDATA[Last year at JAOO I had the chance to speak to Markus from Software Engineering Radio about the talk I gave there on Continuous Integration. It&#8217;s finally available now over here. The slides that go along with the talk are available from the JAOO site.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=77&subd=chrisread&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Last year at JAOO I had the chance to speak to Markus from <a href="http://se-radio.net" target="_blank">Software Engineering Radio</a> about the <a href="http://jaoo.dk/aarhus-2008/presentation/Continuous+Integration" target="_blank">talk</a> I gave there on Continuous Integration. It&#8217;s finally available now over <a href="http://se-radio.net/podcast/2009-04/episode-133-continuous-integration-chris-read" target="_blank">here</a>. The slides that go along with the talk are available from the <a href="http://jaoo.dk/aarhus-2008/file?path=/jaoo-aarhus-2008/slides/ChrisRead_ContinuousIntegration.pdf" target="_blank">JAOO</a> site.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chrisread.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chrisread.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chrisread.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chrisread.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chrisread.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chrisread.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chrisread.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chrisread.wordpress.com/77/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chrisread.wordpress.com/77/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chrisread.wordpress.com/77/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=77&subd=chrisread&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chris-read.net/2009/04/27/podcast-on-continuous-integration-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Chris Read</media:title>
		</media:content>
	</item>
		<item>
		<title>Above the Clouds &#8211; This Sounds Familiar&#8230;</title>
		<link>http://blog.chris-read.net/2009/02/24/above-the-clouds-this-sounds-familiar/</link>
		<comments>http://blog.chris-read.net/2009/02/24/above-the-clouds-this-sounds-familiar/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 13:24:49 +0000</pubDate>
		<dc:creator>Chris Read</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Networks]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[cloud]]></category>

		<guid isPermaLink="false">http://blog.chris-read.net/?p=57</guid>
		<description><![CDATA[I found a link to Above the Clouds, a paper on Cloud Computing recently published by a quartet of UC Berkeley RAD Lab professors. I&#8217;ve been quite disappointed with publications on the subject of the latest buzzword taking the world by storm right now, so I was not expecting much when I first clicked on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=57&subd=chrisread&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I found a link to <a href="http://berkeleyclouds.blogspot.com/" target="_blank">Above the Clouds</a>, a paper on Cloud Computing recently published by a quartet of <a href="http://radlab.cs.berkeley.edu/wiki/RAD_Lab" target="_blank">UC Berkeley RAD Lab</a> professors. I&#8217;ve been quite disappointed with publications on the subject of the latest buzzword taking the world by storm right now, so I was not expecting much when I first clicked on the link. The thing is, as I started reading through the Executive Summary it all sounded very familiar. The outline the give in the summary follows the same outline as a talk I gave in November last year at the <a href="http://www.thoughtworks.com/" target="_blank">ThoughtWorks</a> London office for the <a href="http://www.meetup.com/Londonjavacommunity/" target="_blank">London Java Community</a>.</p>
<p>The only criticism I have is that they don&#8217;t put enough emphasis on one of my key reasons for why it&#8217;s suddenly taken off. Cloud computing is not a new idea &#8211; it&#8217;s an extension of the Utility Computing that John McCarthy talked about in 1961. Although they only make a passing remark in section 3, I think one of the most important reasons it&#8217;s taken off is that the services Amazon provide were the first that were <strong>not</strong> a &#8220;solution looking for a problem&#8221;. Earlier offerings by the likes of Sun, HP and Intel all created a solution that they tried to sell to clients. The problem was that there were remarkably few problems that their solutions solved. Amazon simply exposed services that they were using internally already. That&#8217;s not to say the other reasons they give are not valid, I totally agree with them. I think they just missed a good point.</p>
<p>One of the topics I only glanced over is covered cover quite well in section 6 &#8211; Cloud Computing Economics. They provide some interesting example cost calculations. Although the numbers are obviously US centric, they do provide a nice way for a company to approach making the old &#8220;build vs buy&#8221; comparison.</p>
<p>In summary, I highly recommend this paper for anyone who wants to get the head around what this Cloud stuff is all about and what they need to do to prepare for it.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chrisread.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chrisread.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chrisread.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chrisread.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chrisread.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chrisread.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chrisread.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chrisread.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chrisread.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chrisread.wordpress.com/57/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=57&subd=chrisread&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chris-read.net/2009/02/24/above-the-clouds-this-sounds-familiar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Chris Read</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducing ESCAPE</title>
		<link>http://blog.chris-read.net/2009/02/13/introducing-escape/</link>
		<comments>http://blog.chris-read.net/2009/02/13/introducing-escape/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 12:31:12 +0000</pubDate>
		<dc:creator>Chris Read</dc:creator>
				<category><![CDATA[Build]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Build Pipelines]]></category>
		<category><![CDATA[Config Management]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Continuous Deployment]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.chris-read.net/?p=50</guid>
		<description><![CDATA[Whenever I talk to new clients about Continuous Integration, and especially about using Build Pipelines to extend their CI process to cover testing things like the deployment of their application, there is always one question that is guaranteed to pop up &#8211; how do I manage the configuration of my application in all these environments? [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=50&subd=chrisread&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Whenever I talk to new clients about Continuous Integration, and especially about using Build Pipelines to extend their CI process to cover testing things like the deployment of their application, there is always one question that is guaranteed to pop up &#8211; how do I manage the configuration of my application in all these environments?</p>
<p>This is always a hard one to answer. In the last place I worked as a System Administrator we used <a title="Split-Horizon DNS" href="http://en.wikipedia.org/wiki/Split-horizon_DNS" target="_blank">Split-Horizon DNS</a> as one of the ways to solve connecting to the correct host for a service. Our applications had hard coded hostnames for key services such as <em>db.internal.domain</em>, <em>loghost.internal.domain</em> and <em>mailhost.internal.domain</em>. Depending on which environment they ran in, when the did a DNS lookup they would get an answer that pointed them to the correct server providing that service for the environment they were physically running in. Combine this with tools like an LDAP Server in each of these environments containing the rest of the system configuration and life is easy. Or is it?</p>
<p>DNS and LDAP servers are relatively straight forward for experienced Sys Admins to understand and maintain, but they still can&#8217;t be described as easy to use, which is probably why so few people do it. This limits our options for fixing things down to two general categories &#8211; fix DNS and LDAP admin tools so they are easy to use, or find another way to solve the problem.</p>
<p>We chose the path of least resistance and went for the second option &#8211; creating <a href="http://code.google.com/p/escservesconfig/" target="_blank">ESCAPE</a>. In the Unix tradition, it&#8217;s an app that takes one problem and solves it simply and well (at least in our opinion). It provides a RESTful interface for both the setting and getting of environment configuration. <tt>GET</tt> requests will retrieve configuration, whereas <tt>POST/PUT</tt> requests will create new entries or update them.</p>
<p>The URL scheme we&#8217;ve decided on is most easily demonstrated by constructing an example URL:</p>
<table border="0">
<tbody>
<tr>
<td style="border:1px solid #aaaaaa;padding:5px;"><strong>URL</strong></td>
<td style="border:1px solid #aaaaaa;padding:5px;"><strong>Value returned in the body</strong></td>
</tr>
<tr>
<td style="border:1px solid #aaaaaa;padding:5px;"><tt>http://escape/</tt></td>
<td style="border:1px solid #aaaaaa;padding:5px;">User interface. No API available here.</td>
</tr>
<tr>
<td style="border:1px solid #aaaaaa;padding:5px;"><tt>http://escape/environments/</tt></td>
<td style="border:1px solid #aaaaaa;padding:5px;">A JSON list of all the available environment.</td>
</tr>
<tr>
<td style="border:1px solid #aaaaaa;padding:5px;"><tt>http://escape/environments/production/</tt></td>
<td style="border:1px solid #aaaaaa;padding:5px;">A JSON list of all the applications in the &#8220;production&#8221; environment.</td>
</tr>
<tr>
<td style="border:1px solid #aaaaaa;padding:5px;"><tt>http://escape/environments/production/mywebapp</tt></td>
<td style="border:1px solid #aaaaaa;padding:5px;">All keys and values for the &#8220;mywebapp&#8221; application in the &#8220;production&#8221; environment.e.g:<br />
key1=value1<br />
key2=value2</td>
</tr>
<tr>
<td style="border:1px solid #aaaaaa;padding:5px;"><tt>http://escape/environments/production/mywebapp/thiskey</tt></td>
<td style="border:1px solid #aaaaaa;padding:5px;">The value of &#8220;thiskey&#8221; for the &#8220;mywebapp&#8221; application in the &#8220;production&#8221; environment.</td>
</tr>
</tbody>
</table>
<p>As the tool is now usable we&#8217;ve happily released version 0.1. Currently we&#8217;re busy putting a lot of work into making the management interface understandable and intuitive to use. The closest thing we currently have to a roadmap is our <a href="http://code.google.com/p/escservesconfig/wiki/ToDo" target="_blank">ToDo</a> list.</p>
<p>Please join us on the <a href="http://groups.google.com/group/escservesconfig-discuss" target="_blank">discussion group</a> with your feedback.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chrisread.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chrisread.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chrisread.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chrisread.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chrisread.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chrisread.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chrisread.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chrisread.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chrisread.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chrisread.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=50&subd=chrisread&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chris-read.net/2009/02/13/introducing-escape/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Chris Read</media:title>
		</media:content>
	</item>
		<item>
		<title>Retrospectively Breaching the Wall between Developers and Operations</title>
		<link>http://blog.chris-read.net/2008/11/26/retrospectively-breaching-the-wall-between-developers-and-operations/</link>
		<comments>http://blog.chris-read.net/2008/11/26/retrospectively-breaching-the-wall-between-developers-and-operations/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 09:18:00 +0000</pubDate>
		<dc:creator>Chris Read</dc:creator>
				<category><![CDATA[Build]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://chrisread.wordpress.com/?p=44</guid>
		<description><![CDATA[I like to describe my job at ThoughtWorks as helping Developers and Operations realize that they&#8217;re playing on the same team. No matter how awesome your code is, how elegantly you&#8217;ve solved the problem at hand, how nice and readable the code is &#8211; if you can&#8217;t get it into production your software is just [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=44&subd=chrisread&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I like to describe my job at ThoughtWorks as helping Developers and Operations realize that they&#8217;re playing on the same team. No matter how awesome your code is, how elegantly you&#8217;ve solved the problem at hand, how nice and readable the code is &#8211; if you can&#8217;t get it into production your software is just a collection of bits. Likewise, you can have the best network, the most scalable hardware, the neatest cable patching scheme &#8211; but it&#8217;s just a big fancy heater if it&#8217;s not running the code your business needs.</p>
<p>As I&#8217;m normally brought in with the developers, I&#8217;ve been trying to find efficient ways to engage with the client Operations teams. Normally I end up having one on one conversations with various members of the team, try to find out what their current processes are, what their major challenges are and what their concerns are regarding the project I&#8217;m involved in. I usually do this to keep the safety levels high. The problem though is that it takes quite a lot of time and effort to get things going and get some momentum going.</p>
<p>At my current client though I didn&#8217;t have the time or access to the people to do things the normal way. A meeting was arranged with the key Operations stake holders and I effectively had just 2 hours to explain our development process in general, and Continuous Integration and Build Pipelines in detail. While talking with Graham Brooks about what we wanted to cover, he came up with the idea of running it as a mini retrospective.</p>
<p>After the usual introductions, we gave them 15 minutes to list the Good, the Bad and the Puzzles of their current development and release process. We had good participation from the group and as expected had a high number Bad entries. After talking through the cards and grouping them into related sections, we then allowed them to vote on the ones they most wanted to talk about. Most votes went to the core pain points, and we spent the rest of the time talking about how our process would address those issues. It also helped a lot that most of the Good entries related to the automation they already have in place&#8230;</p>
<p>By the end of the meeting no was talking about the bad old days (lobbing releases over the wall). Everyone was engaged starting to get some spirit of collective ownership going in the whole delivery process and that breaking down the walls that exist between the various silos was high on the list of things to do. Rather than talk to them about our process and how we would like to interact with them, we had allowed them to lead the discussion on which elements from our toolbox would have the greatest value for them.</p>
<p>All I need to do now is learn how to be as good a facilitator as Graham was&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chrisread.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chrisread.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chrisread.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chrisread.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chrisread.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chrisread.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chrisread.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chrisread.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chrisread.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chrisread.wordpress.com/44/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=44&subd=chrisread&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chris-read.net/2008/11/26/retrospectively-breaching-the-wall-between-developers-and-operations/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Chris Read</media:title>
		</media:content>
	</item>
		<item>
		<title>Continuous Integration Server Comparison 2008</title>
		<link>http://blog.chris-read.net/2008/09/22/continuous-integration-server-comparison-2008/</link>
		<comments>http://blog.chris-read.net/2008/09/22/continuous-integration-server-comparison-2008/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 12:22:10 +0000</pubDate>
		<dc:creator>Chris Read</dc:creator>
				<category><![CDATA[Build]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://chrisread.wordpress.com/?p=23</guid>
		<description><![CDATA[Early last year I did a Quick Comparison of some of the popular CI servers of the time. Things have moved on since then, and I&#8217;ve actually been involved with the Cruise development team since then. Now that Cruise has been released, a number of people both inside and outside ThoughtWorks have asked me to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=23&subd=chrisread&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Early last year I did a <a href="http://blog.chris-read.net/2007/02/21/quick-comparison-of-teamcity-12-bamboo-10-and-cruisecontrol-26/" target="_blank">Quick Comparison</a> of some of the popular CI servers of the time. Things have moved on since then, and I&#8217;ve actually been involved with the <a href="http://studios.thoughtworks.com/cruise-continuous-integration" target="_blank">Cruise</a> development team since then. Now that Cruise has been released, a number of people both inside and outside <a href="http://www.thoughtworks.com" target="_blank">ThoughtWorks</a> have asked me to put together a follow up article – here it is.</p>
<p>The list of available products out there has grown a lot in the past 18 months, and the features that they support are really great. Since I did the last review I&#8217;ve actively avoided having a look at the other tools out there to keep a clear focus on what I wanted to see in Cruise. Doing this review has been a great way for me to see what everyone else has been up to.</p>
<p>Just having loads of features does not automatically make for a good tool though. Instead of having a shooting match between who does what, I&#8217;ve taken a little sample Java servlet that I use for demos and tried to get it working with all the tools. This project is hosted on a local subversion repository. I&#8217;m going to try set it up to simply run unit tests and create my distributable .war file. Areas that I&#8217;m going to look at are:</p>
<ul>
<li>Installation (on Linux, OSX and Windows)</li>
<li>Setting up my existing project</li>
<li>What did the tool inspire me to try next</li>
</ul>
<p>Tools that I&#8217;ll be trying out are (in alphabetical order):</p>
<ul>
<li><a href="http://www.anthillpro.com/html/default.html" target="_blank">AntHillPro</a> 3.5.3</li>
<li><a href="http://www.atlassian.com/software/bamboo/" target="_blank">Bamboo</a> 2.1.1</li>
<li><a href="http://studios.thoughtworks.com/cruise-continuous-integration" target="_blank">Cruise</a> 1.0</li>
<li><a href="http://cruisecontrol.sf.net" target="_blank">CruiseControl</a> 2.7.3</li>
<li><a href="https://hudson.dev.java.net/" target="_blank">Hudson</a> 1.252</li>
<li><a href="http://zutubi.com/products/pulse/" target="_blank">Pulse</a> 1.2.56</li>
<li><a href="http://www.jetbrains.com/teamcity/">TeamCity</a> 3.1.2</li>
</ul>
<h2><span id="more-23"></span>AntHillPro</h2>
<h3>Installers</h3>
<p>There are no native platform installers, but you can choose from 3 packages. Each package contains both the server and the agent components.</p>
<ul>
<li>Graphical Java Installer</li>
<li>Windows Command Line Installer</li>
<li>Unix Command Line Installer</li>
</ul>
<h3>Installation</h3>
<p>I chose the Unix Command Line. Unpacked the tarball and ran the script. It&#8217;s unique in that all the script does is kick off an ant build that asks you questions and does the installation. The defaults all seemed pretty reasonable. Installing an agent is done separately and follows the same process. Once you start the processes, hit the web frontend and finish the setup.</p>
<h3>Setting up my project</h3>
<p>This is where things go interesting. There was no obvious “add your project here” button. A bit of clicking around, and I found something under the Admin tab that looked like a good place to start. Then it asked me if I want a Life-Cycle based project or a Non Life-Cycle based one? What&#8217;s a Life-Cycle in this context? I fuddled around and took random guesses, and then figured out that I needed to add a workflow to my project to actually do anything. Fair enough, only I was half way through configuring my new workflow when it asked for my repository, but only gave me a dropdown list to choose from. Back out, into the admin page, find out where to add new repositories, add a Subversion one. Once again try to finish configuring my new project (at least it remembered where I was), but then it all fell apart when trying to add the repository to the workflow. Kept on throwing up “AttributeMissingException: project is missing”. Decided that this had already taken up far too much of my time just to get to this point, and so I gave up.</p>
<h2>Bamboo</h2>
<h3>Installers</h3>
<p>A single installer that contains both the server and the agent.</p>
<ul>
<li>Windows .exe installer</li>
<li>OSX .dmg file</li>
<li>tarball</li>
</ul>
<h3>Installation</h3>
<p>I picked the “Linux” tarball, even though I&#8217;m testing on OSX. I prefer doing this when evaluating products as I think it gives me a better feel for what&#8217;s actually going to be installed, and I&#8217;m guaranteed I can get rid of it efficiently and easily when I&#8217;m done playing with it. Unpackd the tarball, ran the start script. All looks good, but when you try use it it asks you to edit a file in the webapp path pointing to the installation directory. Nasty. Once that&#8217;s fixed and started again, you&#8217;re asked for your license key. There&#8217;s a handy link at the bottom to go get your key, copy paste and you&#8217;re away through the rest of the wizard.</p>
<h3>Setting up my project</h3>
<p>Clicked the Create Plan link. Still has my pet hate of wanting you to specify UPPER CASE KEYS for everything. Are we still using ancient Big Blue iron here that has such limitations? Wants me to specify an ant target which is also a little weird &#8211; I just want the default target! Other than that all very nice. I like how it goes right into the activity page once you&#8217;ve set up your project and you can see what&#8217;s going on, including SVN checkout.</p>
<h3>I then wanted to play with</h3>
<p>Agents. Installed agents on Ubuntu and WinXP (server running on OSX). It&#8217;s pretty easy really. Agent matrix shows you which projects will build on which agents. Also went to look at all the pretty graphs, but I don&#8217;t have much build history right now. Bamboo has built in Clover integration, but I use cobertura in my project for coverage. It looks like they have some interesting reports around code coverage, but I can&#8217;t run them&#8230;</p>
<h2>Cruise</h2>
<p>Disclosure – I wrote the installers for Cruise, so obviously I like them.</p>
<h3>Installers</h3>
<p>Separate installers for the server and the agent components.</p>
<ul>
<li>Windows .exe installer</li>
<li>OSX .app packaged in a zip</li>
<li>Linux RPM and Debian packages</li>
</ul>
<h3>Installation</h3>
<p>This is one of the few products that does not ship a generic tarball or zip file. As I&#8217;m doing all this on a Mac, I pulled down the server and agent zip files, unpacked them, and dragged the .app&#8217;s over to my Applications folder. Double click on each and we&#8217;re up. Once the server is up it opens up the admin interface in your browser. The first thing you&#8217;re asked for is your license key.</p>
<h3>Setting up my project</h3>
<p>The very first thing you&#8217;re hit with (after you&#8217;ve put in your license key) is a wizard to set up your project. Follow the prompts, and fill in where your test results and artefacts are stored. It won&#8217;t let you create the project until it verifies that it can connect to your source repository, so make sure it&#8217;s up before you start.</p>
<h3>I then wanted to play with</h3>
<p>Pipelines. I presented one of the very first papers on Build Pipelines with Jez Humble (now product manager for Cruise) and Dan North at Agile 2006. When I first started implementing them I had to do all kinds of unholy hacks with CruiseControl, but the benefit of using CI like this was well worth the pain at the time. At the moment you have to jump into nasty XML to configure pipelines in Cruise, but the whole process should be wizarded up in the next release. Having lots of agents allows you to split up jobs in your pipeline stages quite nicely so they run in parallel and speed up your feedback loop.</p>
<p>The other great feature I like that product companies are always asking me about is the ability to run parallel builds for a stage on multiple platforms. Whether you&#8217;ve got a .Net app that you need to test across multiple versions of Windows, or a web app that needs to be tested from a whole matrix of different web browsers, Cruise makes it easy to run the same tests in all these different environments using the same build of your application. If the tests pass on all of them, your stage will pass, and you know that your product is playing nicely with all of them.</p>
<h2>CruiseControl</h2>
<h3>Installers</h3>
<ul>
<li>Windows .exe installer</li>
<li>Generic zip file</li>
</ul>
<h3>Installation</h3>
<p>More unzip and run script. It just comes up with the sample project.</p>
<h3>Setting up my project</h3>
<p>This is where the venerable Granddaddy of CI servers really started showing it&#8217;s age. I had to manually check out my project, then edit the xml config file to get it going. If I&#8217;d not been using it for almost 4 years I&#8217;d get pissed off and move along.</p>
<h3>I then wanted to play with</h3>
<p>Something else. If you&#8217;re using it already and it&#8217;s doing the job you want it to, then there is no real reason to change. If you&#8217;re new to CI and are looking for something easy to get you started, then I&#8217;m sad to say I suggest you look elsewhere&#8230;</p>
<h2>Hudson</h2>
<h3>Installers</h3>
<ul>
<li>A single war file for everyone.</li>
</ul>
<h3>Installation</h3>
<p>The most basic of all, just run java -jar hudson.war or drop the war file into your favourite servlet container. Makes it kinda hard to know what version you have though, and by the look if it they release new versions quite regularly.</p>
<h3>Setting up my project</h3>
<p>Not too bad. Pointing at unit test and artefacts was a bit weird as it starts one level higher than I expected. I liked the weather reports. Because the build was failing (because it could not publish any artefacts or find test results), it had little storm clouds. Nice.</p>
<h3>I then wanted to play with</h3>
<p>The plugins. There&#8217;s quite a few, and I like how you can just download them and go.</p>
<h2>Pulse</h2>
<h3>Installers</h3>
<ul>
<li>Windows .exe installer</li>
<li>tarball</li>
<li>zip</li>
</ul>
<h3>Installation</h3>
<p>Another unpack the tarball and run the start script. I see a trend here. Hit the web interface and it asks you for a data directory. Also needs a license key to get going, but has a nice link there to go get one.</p>
<h3>Setting up my project</h3>
<p>Nice start screen with list of things to do. Hit add project, then got confused about what the URL was it was asking for. Got a test button for your SCM &#8211; yay! Setting up the artefacts you want is easy, it all just works. Only thing I can moan about is that I can&#8217;t see what&#8217;s going on in the builds, and it feels slower than the rest for some reason.</p>
<h3>I then wanted to play with</h3>
<p>Personal builds! It&#8217;s not something I&#8217;ve ever played around with, but it looked kinda straight forward with pulse, and it is! Just install a little tool on your development workstation and use it to invoke a personal build. Does require a bit of extra data in the project, but it&#8217;s great.</p>
<p>It also has agents. I love agents. They have an interesting way of doing them though. You point the agent at the server. I suppose that&#8217;s one way of getting around the security implications of other people getting their hands on your code. Agents auto-discover what their hosts provide, and when configuring a project you get a drop down list of what&#8217;s provided already. You&#8217;ve still got the freedom to add your own stuff too.</p>
<p>It has stages, kinda like our build pipelines. To use them nicely though you need to start editing their XML, but they&#8217;ve got great help along the right for you to see what your options are. Their stages run in parallel, so it&#8217;s not really like our Cruise pipelines, but at least they got the parallel stuff going.</p>
<h2>Team City</h2>
<h3>Installers</h3>
<ul>
<li>Windows .exe installer</li>
<li>tarball</li>
</ul>
<h3>Installation</h3>
<p>Unpack the tarball, find and run the start script.</p>
<h3>Setting up my project</h3>
<p>Hit the Create Project button. Interesting that you create the project first, then add the config after. Test SCM button. Auto tagging and code coverage built in. Nice. Also agent based. Option to automagically run emma for you. Tried it, but because I already use cobertura it barfed. It lost my artefacts config somehow. Lots of options. Also by default does not trigger a build on check in &#8211; what&#8217;s with that?</p>
<h3>I then wanted to play with</h3>
<p>Integration with IntelliJ. I&#8217;m a big fan of IntelliJ and use it a lot. It makes sense in a developer centric world, because the IDE is the developers portal into the world of code. I like the way you can click on a failed test and it takes you to the test code, as well as the ability to take responsibility for fixing a broken build.</p>
<h2>Summary</h2>
<p>The world of CI servers has come a long way in the past 18 months. It&#8217;s certainly reinforced my belief that competition is a great driver for innovation. When I started at ThoughtWorks clients would often complain that they&#8217;d like to do Continuous Integration, but setting up a CI server was way too hard. Complexity of tool configuration is now no longer an acceptable excuse for not doing CI.</p>
<p>It&#8217;s also great to see the trend of agents being so popular. The days of having a big mother of a build server for a project or small group of teams is over. After one of the Cruise demos I did here in the UK our client commented that it was great that he could finally find a use for all the overpowered desktop machines their managers have – use them as build agents!</p>
<p>As a final note for those of you who are trying to decide on what CI server to use &#8211; remember to pick one that supports your process and what you want CI to do for you.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chrisread.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chrisread.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chrisread.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chrisread.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chrisread.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chrisread.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chrisread.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chrisread.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chrisread.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chrisread.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=23&subd=chrisread&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chris-read.net/2008/09/22/continuous-integration-server-comparison-2008/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Chris Read</media:title>
		</media:content>
	</item>
		<item>
		<title>Speaking at JAOO 2008</title>
		<link>http://blog.chris-read.net/2008/09/12/speaking-at-jaoo-2008/</link>
		<comments>http://blog.chris-read.net/2008/09/12/speaking-at-jaoo-2008/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 15:54:01 +0000</pubDate>
		<dc:creator>Chris Read</dc:creator>
				<category><![CDATA[Build]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://chrisread.wordpress.com/?p=30</guid>
		<description><![CDATA[I&#8217;m busy adding the finishing touches to my talk for JAOO this year and I&#8217;ve just realised that I&#8217;ve not let you guys know that I&#8217;m going to be there. Consider yourself warned. Last year at the conference I got a chance to show off the new UI we did for CruiseControl with Erik Dörnenburg. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=30&subd=chrisread&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m busy adding the finishing touches to my talk for <a href="http://jaoo.dk/conference/" target="_blank">JAOO</a> this year and I&#8217;ve just realised that I&#8217;ve not let you guys know that I&#8217;m going to be there. Consider yourself warned.</p>
<p>Last year at the conference I got a chance to show off the new UI we did for <a href="http://cruisecontrol.sourceforge.net/" target="_blank">CruiseControl</a> with <a href="http://erik.doernenburg.com/" target="_blank">Erik  Dörnenburg</a>. Afterwards I was having a chat with <a href="http://martinfowler.com/" target="_blank">Martin Fowler</a>, and I commented on how I&#8217;d like to see a whole track at JAOO dedicated to Building and Deploying software. While I&#8217;m sure I can&#8217;t take all the credit for it, this year there is going to be a short <a href="http://jaoo.dk/tracks/show_track.jsp?trackOID=175" target="_blank">Build track</a> with me talking about Continous Integration. Hope to see you there&#8230;</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/chrisread.wordpress.com/30/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/chrisread.wordpress.com/30/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chrisread.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chrisread.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chrisread.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chrisread.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chrisread.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chrisread.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chrisread.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chrisread.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chrisread.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chrisread.wordpress.com/30/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.chris-read.net&blog=4083712&post=30&subd=chrisread&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.chris-read.net/2008/09/12/speaking-at-jaoo-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Chris Read</media:title>
		</media:content>
	</item>
	</channel>
</rss>