<?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>Mike CI blogs</title>
	<atom:link href="http://blogs.mikeci.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.mikeci.com</link>
	<description>Blogs from the Mike CI Team</description>
	<lastBuildDate>Thu, 19 Aug 2010 09:55:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blogs.mikeci.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/2e18a6aa6161464205c909e126f69930?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Mike CI blogs</title>
		<link>http://blogs.mikeci.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blogs.mikeci.com/osd.xml" title="Mike CI blogs" />
	<atom:link rel='hub' href='http://blogs.mikeci.com/?pushpress=hub'/>
		<item>
		<title>What&#8217;s it Like Using Hosted Continuous Integration</title>
		<link>http://blogs.mikeci.com/2010/08/19/whats-it-like-using-hosted-continuous-integration/</link>
		<comments>http://blogs.mikeci.com/2010/08/19/whats-it-like-using-hosted-continuous-integration/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 09:55:12 +0000</pubDate>
		<dc:creator>Mike Jessop</dc:creator>
				<category><![CDATA[Mike news]]></category>
		<category><![CDATA[hosted services]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[clients]]></category>
		<category><![CDATA[users]]></category>

		<guid isPermaLink="false">http://blogs.mikeci.com/?p=468</guid>
		<description><![CDATA[We’re always keen on finding out what people think about using MikeCI. With hosted continuous integration being a fairly new concept we are embarking into new territory and want to ensure that we are heading in the right direction. As a result we’ve been keen on hearing our client feedback to see how they’ve found [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=468&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We’re always keen on finding out what people think about using MikeCI.</p>
<p>With hosted continuous integration being a fairly new concept we are embarking into new territory and want to ensure that we are heading in the right direction. As a result we’ve been keen on hearing our client feedback to see how they’ve found their MikeCI experience.</p>
<p>Lead Developer, <a href="http://code.google.com/u/akbertram/">Alex Bertram</a> kindly took some time out of his busy schedule in The   Hague, Netherlands to talk about how MikeCI was being used in his <a href="http://code.google.com/p/sigma-h/">Sigmah</a> (previously ActivityInfo) project.</p>
<h3>What are you working on?</h3>
<p>Project <a href="http://code.google.com/p/sigma-h/">Sigmah</a> is an information management platform designed for humanitarian organisations and was originally developed for UNICEF but has since expanded. The platform allows users to create their own databases online and track, map and analyse performance indicators over time.</p>
<h3>Why did you choose MikeCI?</h3>
<p>“There aren’t too many choices out there and MikeCI offered the strongest support for our technology stack. Our stack consisted of Subversion SCM, Java and Maven, which MikeCI supported. The great Maven integration provided a simple straight forward environment in which to build our project.”</p>
<h3>How has your experience been with MikeCI?</h3>
<p>“It&#8217;s become pretty key over the last month. Another organization won a grant to expand ActivityInfo (now Sigmah) and hired a team in Paris to add the components they wanted. As we continue development here in the Netherlands for the original client, MikeCI has become the referee that keeps the two teams from stepping on each others toes.</p>
<p>With geographically dispersed teams, we needed a CI server that could be accessed from any location and allowed multiple teams to submit code.</p>
<p>I&#8217;ve set up my email account to forward all reports from MikeCI to our development mailing list, so everyone is getting a pretty constant stream of activity with updates and code reviews from SVN, build reports, etc. It&#8217;s nice.</p>
<p>We are really embracing cloud computing solutions by using and developing SAAS software. Our team uses Google Apps, ProjectLocker for SVN, Amazon EC2 and Google App engine and of course MikeCI.”</p>
<h3>How could MikeCI be improved?</h3>
<p>“For me the next great thing would be making the results of the build available. It would be awesome to be able to link to the most recent javadocs or code coverage reports, or just a big widget for the forge site.</p>
<p>Also having some sort of API would be terrific as this would help us automate releases and deployment to the server, which we&#8217;re trying to do every 2-3 weeks.”</p>
<p><strong>MikeCI </strong>- Developing an API has always been on our agenda and is certainly something we would look to include on our roadmap. Similarly making builds available publicly is something we would like to include somewhere down the line.</p>
<p>A big thanks to Alex for his input and we wish him all the success and many happy builds to come.</p>
<p>If you would like to share your experiences with MikeCI or try MikeCI with a free 30 day trial, then email <a href="mailto:mike@mikeci.com">mike@mikeci.com</a> or <a href="https://build.mikeci.com/account/signup.html">register here today</a>.</p>
<p><a href="https://build.mikeci.com/account/signup.html"><img class="alignleft" title="Try MikeCI Today" src="http://mikeciblogs.files.wordpress.com/2010/06/trymike2.jpg?w=190&#038;h=173" alt="Try MikeCI Today" width="190" height="173" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikeciblogs.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikeciblogs.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikeciblogs.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikeciblogs.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikeciblogs.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikeciblogs.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikeciblogs.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikeciblogs.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikeciblogs.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikeciblogs.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikeciblogs.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikeciblogs.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikeciblogs.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikeciblogs.wordpress.com/468/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=468&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.mikeci.com/2010/08/19/whats-it-like-using-hosted-continuous-integration/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ed545474353fc231c28b2f56edd9fd75?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mike2mikeci</media:title>
		</media:content>

		<media:content url="http://mikeciblogs.files.wordpress.com/2010/06/trymike2.jpg" medium="image">
			<media:title type="html">Try MikeCI Today</media:title>
		</media:content>
	</item>
		<item>
		<title>Continuous Integration for Agile Project Managers (Part 3)</title>
		<link>http://blogs.mikeci.com/2010/06/15/continuous-integration-for-agile-project-managers-part-3/</link>
		<comments>http://blogs.mikeci.com/2010/06/15/continuous-integration-for-agile-project-managers-part-3/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 08:50:16 +0000</pubDate>
		<dc:creator>Adam Leggett</dc:creator>
				<category><![CDATA[Build Management]]></category>
		<category><![CDATA[Development process and tools]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[functional testing]]></category>
		<category><![CDATA[answer]]></category>

		<guid isPermaLink="false">http://blogs.mikeci.com/?p=448</guid>
		<description><![CDATA[In part 1 of this series, I hopefully provided you with an introduction to Continuous Integration (CI) and an overview of the building blocks of the CI process. With part two, we introduced the concept of a CI life-cycle and how to bind software quality checks to discrete life-cycle &#8216;phases&#8217;. In this final part, I&#8217;ll [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=448&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://blogs.mikeci.com/2010/03/30/continuous-integration-for-agile-project-managers-part-1/">part 1</a> of this series, I hopefully provided you with an introduction to Continuous Integration (CI) and an overview of the building blocks of the CI process.</p>
<p>
With <a href="http://blogs.mikeci.com/2010/04/27/continuous-integration-for-agile-project-managers-part-2/">part two</a>, we introduced the concept of a CI life-cycle and how to bind software quality checks to discrete life-cycle &#8216;phases&#8217;.
</p>
<p>
In this final part, I&#8217;ll attempt to explain how you can use CI to run functional tests early in your development process and show how this helps us to promote a software release on its journey from development to production. I&#8217;ll then try to condense the three parts of this series into a handy diagram.
</p>
<h2>Automation, Automation, Automation</h2>
<p>It should hopefully be clear by now that a successful CI implementation is largely dependent upon other processes that can be automated. For example</p>
<ul>
<li>checkout or update of source code by a version control tool</li>
<li>compilation of project source code by a build tool</li>
<li>execution of source code checking by a static analysis tool</li>
<li>unit test execution by a unit test harness or runner</li>
</ul>
<p>Therefore, it seems reasonable that if we can automate a software development task in a way that is deterministic and repeatable then it can be executed during our CI process. The intention is to remove human error and have these tasks run in the background, and in the event of a &#8216;failure&#8217; to be notified by a CI server. Some more advanced candidates for automation might include:</p>
<ul>
<li>provisioning of a clean, known harness or environment into which we deploy a release for the purposes of functional or acceptance testing</li>
<li>starting and stopping services that are required for our functional tests and population of any test data dependencies</li>
<li>execution of the functional tests</li>
</ul>
<h2>Functional Testing and CI</h2>
<p>
OK, so how do you go about adding these additional capabilities? Well, creating an automated suite of functional tests that can be triggered during the CI process is a reasonably non-trivial task.</p>
<p>Let&#8217;s take a look at the main areas for consideration.</p>
<h3>Test Fixtures</h3>
<p>
In addition to writing the tests, you also need to carefully consider your test dependencies (also known as &#8216;fixtures&#8217;), such as any test data you might need in a database for example. Some code frameworks, like Ruby On Rails, encourage development teams to consider these test fixtures early-on in a software development project. Outside of such frameworks, it is more common to find  ad-hoc processes. The key thing is ensure that your dependencies, such as a database, are in a known state prior to test execution and that the configuration or population of dependencies is entirely automated. Here, we can again apply the concept of a CI life-cycle to this particular scenario. We will need to bind the activity of test data population to a life-cycle phase <b><i>prior to</i></b> the execution of functional tests. We may also need to create a subsequent binding <b><i>after</i></b> test execution to ensure that we &#8216;tear-down&#8217; the test data and keep everything in a known, consistent state.</p>
<h3>Test Runner</h3>
<p>Obviously, we require a tool that can execute functional tests in an automated fashion. Furthermore, there needs to be a way to trigger is execution at an appropriate stage in the CI process. Dependending upon the nature of the application you are developing, there are a number of choices. You can find a useful list of GUI testing tools <a href="http://en.wikipedia.org/wiki/List_of_GUI_testing_tools">here</a>. The majority of projects that I have worked on in recent times have been web-based, and we have used <a href="http://seleniumhq.org/" target="_blank">Selenium</a> extensively. </p>
<p>Selenium is open source, and allows you to test your app in multiple browsers. It also has bindings for lots of different programming languages, including a basic &#8216;dialect&#8217; of HTML markup that is accessible to non-programmers (this type of thing is more formally referred to as a Domain Specific Language or DSL). It also comes with a browser plug-in that allows you to record and replay your tests. For the more technically-minded amongst you, I&#8217;ve already blogged in some detailed about <a href="http://blogs.mikeci.com/2010/05/06/continuous-testing-with-selenium-and-jbehave-using-page-objects/" target="_blank">how we use Selenium on Mike</a> and included an example project that can be checked out from Google Code.</p>
<h3>Test Environment</h3>
<p>
The third piece in our jigsaw is the environment within or against which the functional tests will run. Environments are often overlooked where automation is concerned, but it is very common to experience issues during CI that are a result of an inconsistent or poorly-configured environment. In my opinion, you should consider environments as a &#8216;first class concept&#8217;. They should be treated like any other artefact of the development process &#8211;  configuration managed, reproducible and ideally, verified or unit tested.</p>
<p>In addition, keeping the development environments in a form which mirrors a &#8216;cut-down&#8217; copy of production really helps when promoting your application through the various test environments it may encounter on its journey into the live estate. Hopefully this should help you avoid the &#8220;Well, it works on my machine&#8230;.&#8221; discussion that frequently happens in dev shops where environments are poorly controlled and managed.</p>
<p>If we have automated the ability to provision or script the creation and tear down of an environment, then should not surprise you that we can harness this within our CI life-cycle. For example, with enterprise Java (JEE) projects you can use tools such as <a href="http://cargo.codehaus.org/" target="_blank">Cargo</a> that allow you to provision, start, deploy-to and stop your application server of choice. Cargo supports a wide variety of server environments, from open source, such as Apache Tomcat, through to Oracle WebLogic.</p>
<h2>Wiring it Together</h2>
<p>
Ok. If you&#8217;ve been paying attention at the back throughout this series then hopefully the following diagram should make sense. Let&#8217;s recap the steps 1 through 12 below that represent the essential elements of a CI process that can help your agile project to deliver a high-quality solution. Note that at any point past stage 3, the build may be set to fail, resulting in an email (or other e.g. IM) notification to be sent to your team.
</p>
<div id="attachment_18" class="wp-caption aligncenter" style="width: 310px"><a href="http://builtbyadam.files.wordpress.com/2010/06/ci-diagram.png"><img src="http://builtbyadam.files.wordpress.com/2010/06/ci-diagram.png?w=300&#038;h=284" alt="Continuous Integration - A Summary of Steps" title="Continuous Integration" width="300" height="284" class="size-medium wp-image-18" /></a><p class="wp-caption-text">Continuous Integration - A Summary of Steps</p></div>
<ol>
<li>Developers work to transform the requirements or stories into source code using the programming language of choice.</li>
<li>They periodically check-in (commit) their work into a version control system (VCS)</li>
<li>The CI server is polling the VCS for changes. It initiates the build process when it encounters a change. The build is executed using a dedicated tool for the job such as Maven, Ant or Rake etc. Depending upon the language used, the source code may need to be compiled.</li>
<li>Static analysis is performed on the source code, to ensure compliance with coding standards and to avoid common causes of bugs.</li>
<li>Automated unit tests are executed.</li>
<li>The percentage of the production code exercised by the unit tests is measured using a coverage analysis tool.</li>
<li>A binary artefact package is created. At this point we might want to assist derivation and provenence by including some additional metadata with the artefact e.g. a build timestamp, or the source code repository revision that was used to produce it.</li>
<li>Prepare for functional testing by setting up the test fixtures. For example, create the development database schema and populate it with some data.</li>
<li>Prepare for functional testing by provisioning a test environment and deploying the built artefact.</li>
<li>Functional tests are executed. Post-execution, tear down any fixtures or environment established in 8 and 9.</li>
<li>Generate reports to display the relevant metrics for the build. E.g. How many tests passed? What is the number and severity of coding standard violations?</li>
<li>The process is continuous of course! So rinse&#8230;and repeat&#8230;.</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikeciblogs.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikeciblogs.wordpress.com/448/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikeciblogs.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikeciblogs.wordpress.com/448/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikeciblogs.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikeciblogs.wordpress.com/448/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikeciblogs.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikeciblogs.wordpress.com/448/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikeciblogs.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikeciblogs.wordpress.com/448/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikeciblogs.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikeciblogs.wordpress.com/448/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikeciblogs.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikeciblogs.wordpress.com/448/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=448&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.mikeci.com/2010/06/15/continuous-integration-for-agile-project-managers-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bbd65c96c65948362f981d0f5cb8a86e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Adam</media:title>
		</media:content>

		<media:content url="http://builtbyadam.files.wordpress.com/2010/06/ci-diagram.png?w=300" medium="image">
			<media:title type="html">Continuous Integration</media:title>
		</media:content>
	</item>
		<item>
		<title>Kiln Repository Support</title>
		<link>http://blogs.mikeci.com/2010/05/25/kiln-repository-support/</link>
		<comments>http://blogs.mikeci.com/2010/05/25/kiln-repository-support/#comments</comments>
		<pubDate>Tue, 25 May 2010 12:00:05 +0000</pubDate>
		<dc:creator>Adam Leggett</dc:creator>
				<category><![CDATA[Mike news]]></category>
		<category><![CDATA[hosted services]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[kiln]]></category>

		<guid isPermaLink="false">http://blogs.mikeci.com/?p=428</guid>
		<description><![CDATA[Today we are pleased to announce support for projects hosted within Kiln On-Demand repositories. For those of you who are unfamiliar with Kiln, it is based upon the popular open source Distributed Version Control System (DVCS) Mercurial. We have created a short screen cast that demonstrates this new feature using the Java Petstore (built using [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=428&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Today we are pleased to announce support for projects hosted within <a href="http://www.fogcreek.com/Kiln/IntrotoOnDemand.html" target="_blank">Kiln On-Demand</a> repositories.</p>
<p><img src="https://shop.fogcreek.com/i/Kiln/kiln-logo.jpg" alt="Kiln Logo" /></p>
<p>
For those of you who are unfamiliar with Kiln, it is based upon the popular open source Distributed Version Control System (DVCS) <a href="http://mercurial.selenic.com/" target="_blank">Mercurial</a>.</p>
</p>
<p>We have created a short <a href="http://www.youtube.com/watch?v=taxPSnnwCoI" target="_blank">screen cast</a> that demonstrates this new feature using the Java Petstore (built using Maven) as an example project.</p>
<p>You can also find additional information about our support for Kiln in our new, comprehensive, <a href="http://docs.mikeci.com">on-line user guide</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikeciblogs.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikeciblogs.wordpress.com/428/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikeciblogs.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikeciblogs.wordpress.com/428/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikeciblogs.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikeciblogs.wordpress.com/428/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikeciblogs.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikeciblogs.wordpress.com/428/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikeciblogs.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikeciblogs.wordpress.com/428/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikeciblogs.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikeciblogs.wordpress.com/428/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikeciblogs.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikeciblogs.wordpress.com/428/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=428&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.mikeci.com/2010/05/25/kiln-repository-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bbd65c96c65948362f981d0f5cb8a86e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Adam</media:title>
		</media:content>

		<media:content url="//shop.fogcreek.com/i/Kiln/kiln-logo.jpg" medium="image">
			<media:title type="html">Kiln Logo</media:title>
		</media:content>
	</item>
		<item>
		<title>Continuous Testing with Selenium and JBehave using Page Objects</title>
		<link>http://blogs.mikeci.com/2010/05/06/continuous-testing-with-selenium-and-jbehave-using-page-objects/</link>
		<comments>http://blogs.mikeci.com/2010/05/06/continuous-testing-with-selenium-and-jbehave-using-page-objects/#comments</comments>
		<pubDate>Thu, 06 May 2010 10:01:37 +0000</pubDate>
		<dc:creator>Adam Leggett</dc:creator>
				<category><![CDATA[Build Management]]></category>
		<category><![CDATA[Development process and tools]]></category>
		<category><![CDATA[Mike development]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[JBehave]]></category>
		<category><![CDATA[Selenese]]></category>

		<guid isPermaLink="false">http://blogs.mikeci.com/?p=397</guid>
		<description><![CDATA[Since Mike&#8216;s inception we have always sought to automate as much of our testing as possible. For some time now we have been using Selenium for our functional/acceptance tests, and thus far have been very happy with this approach. Initially, we decided to use Selenese-style tests, as we felt this would enable non-programmers to help [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=397&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Since <a href="http://mikeci.com" target="_blank">Mike</a>&#8216;s inception we have always sought to automate as much of our testing as possible. For some time now we have been using <a href="http://seleniumhq.org/" target="_blank">Selenium</a> for our functional/acceptance tests, and thus far have been very happy with this approach. Initially, we decided to use <a href="http://darkforge.blogspot.com/2006/12/why-is-html-selenese-so-simplistic.html" target="_blank">Selenese-style tests</a>, as we felt this would enable non-programmers to help maintain and extend the coverage of our tests. Someone with a basic grasp of markup and enough ability to make small re-factorings to the HTML code generated by <b>Selenium IDE</b>. However, as the range of features provided by our platform has started to grow we have found that we are doing a lot of ctrl+c and ctrl+v of the Selenese scripts, and generally violating our DRY principles. After some internal debate, we finally settled on a new approach that adopts <a href="http://blog.dannorth.net/introducing-bdd/" target="_blank">Behaviour Driven Development</a> (<b>BDD</b>) techniques. This works nicely with our Agile, <b>User Story</b> based approach to development and (as you might expect) our advanced internal practices when using <b>Continuous Integration</b> for our own purposes.</p>
<h2>BDD Framework Selection</h2>
<p>The Mike codebase is predominately Java, so it seemed sensible to choose a Java-based BDD framework. We could have opted for something like the Ruby rockstars fave <a href="http://cukes.info/" target="_blank">Cucumber</a>, which is a now well-established, but in the end decided upon <a href="http://jbehave.org/" target="_blank">JBehave</a>. It got our vote for a number of reasons:</p>
<ul>
<li>It&#8217;s an active project, with regular production releases.</li>
<li>It&#8217;s &#8216;maven-ized&#8217; and you can bind a handy JBehave plugin to appropriate life-cycle phases</li>
<li>It provides a web testing sub-component that gives you a nice, simple abstraction for Selenium</li>
<li>Scenarios can be defined in plain-text, just like Cucumber</li>
<li>It integrates into an IDE just like any other xUnit-based testing framework (right Click &gt; Run As &gt; JUnit Test)</li>
</ul>
<p>The plain-text scenarios were of particular interest, as they allow non-programmers to continue to author test flows for each story. On the downside, it does mean that only developers can provide the implementation of these scenarios. But overall, it provides a good fit for our team profile.
</p>
<h2>An Example</h3>
<p>I&#8217;ll walk through an example of a simple JBehave BDD-style scenario, that seeks to test that perennial fave &#8211; the Java Petstore web application:</p>
<div style="background-color:#f5f5f5;overflow:auto;">
<pre style="font:.9em 'Courier New', Courier;">
<code>
&nbsp;Scenario: Successful Login

&nbsp;Given the user opens the home page
&nbsp;When the user clicks the enter store link
&nbsp;Then the store front page should be displayed
&nbsp;When the user clicks the sign in link
&nbsp;Then the store login page should be displayed
&nbsp;When the user enters username j2ee
&nbsp;And the user enters password j2ee
&nbsp;And the user clicks the login button
&nbsp;Then the store front page should be displayed for user ABC
</code>
</pre>
</div>
<p>This combination of &#8216;Given&#8217;, &#8216;When&#8217; and &#8216;Then&#8217; maps very nicely to a test context, event and expected outcome for each of the various pathways through a User Story.</p>
<p>
So now that we have our scenario, stored in a text file name &#8216;login_scenarios&#8217;, using JBehave we need to create two additional classes. These are:</p>
<ol>
<li> a trivial subclass of <code>org.jbehave.scenario.Scenario</code> whose name maps to the associated text file (<a href="http://mikesamples.googlecode.com/svn/trunk/maven/jpetstore-maven-multi-module/jpetstore-maven-functional-tests/src/test/java/com/mikeci/jpetstore/test/scenario/LoginScenarios.java" target="_blank">LoginScenarios.java</a>)</li>
<li> a subclass of <code>org.jbehave.web.selenium.SeleniumSteps</code> (<a href="http://mikesamples.googlecode.com/svn/trunk/maven/jpetstore-maven-multi-module/jpetstore-maven-functional-tests/src/test/java/com/mikeci/jpetstore/test/scenario/LoginSteps.java" target="_blank">LoginSteps.java</a>) that provides an implementation for each of the &#8216;Given&#8217;, &#8216;When&#8217; and &#8216;Then&#8217; statements.</li>
</ol>
<p>For example:</p>
<div style="background-color:#f5f5f5;overflow:auto;">
<pre style="font:.9em 'Courier New', Courier;">
<code>
&nbsp;@Given("the user opens the home page")
&nbsp;public void theUserOpensTheHomePage(){
&nbsp;	homePage = new HomePage(selenium, runner);
&nbsp;	homePage.open("/jpetstore");
&nbsp;}
</code>
</pre>
</div>
<p>Notice how JBehave uses simple annotations to map the scenario elements to Java methods. You&#8217;ll probably also notice the use of a &#8216;page&#8217; object in the method body, which performs the actual heavy-lifting of the tests.  In addition, the methods in the JBehave-provided base class <code>SeleniumSteps</code> can be overridden as required. For example, override <code>createSelenium()</code> if you need to provide a custom instance of Selenium with an alternative configuration.
</p>
<h2>Page Objects</h2>
<p>
Within a web application UI there are areas that our tests interact with. Using the <a href="http://www.alvinsingh.org/2008/09/whats-wrong-with-current-web-testing-approaches/" target="_blank">Page Object pattern</a> allows us to intuitively model these pages as objects within the test code. This massively reduces the amount of duplicated code and means that if the UI changes, the fixes need only be applied in one place. This means we get our <a href="http://www.markhneedham.com/blog/2009/01/30/tdd-test-dryness/" target="_blank">DRY testing mojo</a> back after our experiences with copy &#8216;n&#8217; pasted Selenese markup. To make things even simpler, its a good idea to create an abstract base (<a href="http://mikesamples.googlecode.com/svn/trunk/maven/jpetstore-maven-multi-module/jpetstore-maven-functional-tests/src/test/java/com/mikeci/jpetstore/test/page/Page.java" target="_blank">Page.java</a>) class that exposes a series of useful methods to its concrete children. Here&#8217;s an example of a class that represents the login page of our demo Java petstore app.</p>
<div style="background-color:#f5f5f5;overflow:auto;">
<pre style="font:.9em 'Courier New', Courier;">
<code>
&nbsp;public class StoreLoginPage extends Page {

	public StoreLoginPage(Selenium selenium, ConditionRunner runner) {
		super(selenium, runner);
	}

	@Override
	public void verifyPage() {
		textIsVisible("Please enter your username and password.");
	}

	public void verifyPresenceOfInvalidCredentialsErrorMessage(){
		textIsVisible("Invalid username or password. Signon failed.");
	}

	public void typeUsername(String username){
		type("//input[@name='username']", username);
	}

	public void typePassword(String password){
		type("//input[@name='password']", password);
	}

	public StoreFrontPage clickLoginButton(){
		clickButton("//input[@value='Login']");
		waitForPageToLoad();
		return new StoreFrontPage(selenium, runner);
	}
&nbsp;}
</code>
</pre>
</div>
<p>Once these page classes are wired into our <code>SeleniumSteps</code> subclasses, we can use the action (open, click, type etc) or verification style methods to drive the tests.</p>
<h2>Maven Magic</h2>
<p>As mentioned earlier,  we selected JBehave in part because of its Maven integration. There is plug-in you can configure to execute the tests during the required phase:</p>
<div style="background-color:#f5f5f5;overflow:auto;">
<pre style="font:.9em 'Courier New', Courier;">
<code>
&lt;project&gt;
[...]
  &lt;plugins&gt;
  [...]
    &lt;plugin&gt;
	&lt;groupId&gt;org.jbehave&lt;/groupId&gt;
	&lt;artifactId&gt;jbehave-maven-plugin&lt;/artifactId&gt;
	&lt;version&gt;2.5.1&lt;/version&gt;
	&lt;executions&gt;
		&lt;execution&gt;
			&lt;id&gt;run-scenarios-found&lt;/id&gt;
			&lt;phase&gt;integration-test&lt;/phase&gt;
			&lt;configuration&gt;
				&lt;scenarioClassNames&gt;
					&lt;scenarioClassName&gt;
						com.mikeci.jpetstore.test.scenario.LoginScenarios
        				&lt;/scenarioClassName&gt;
				&lt;/scenarioClassNames&gt;
				&lt;classLoaderInjected&gt;false&lt;/classLoaderInjected&gt;
				&lt;skip&gt;false&lt;/skip&gt;
				&lt;ignoreFailure&gt;false&lt;/ignoreFailure&gt;
				&lt;batch&gt;true&lt;/batch&gt;
				&lt;scope&gt;test&lt;/scope&gt;
			&lt;/configuration&gt;
			&lt;goals&gt;
				&lt;goal&gt;run-scenarios&lt;/goal&gt;
			&lt;/goals&gt;
		&lt;/execution&gt;
	&lt;/executions&gt;
	&lt;dependencies&gt;
		&lt;dependency&gt;
			&lt;groupId&gt;org.jbehave.web&lt;/groupId&gt;
			&lt;artifactId&gt;jbehave-web-selenium&lt;/artifactId&gt;
			&lt;version&gt;2.1.4&lt;/version&gt;
		&lt;/dependency&gt;
	&lt;/dependencies&gt;
    &lt;/plugin&gt;
  [...]
  &lt;/plugins&gt;
[...]
&lt;/project&gt;
</code>
</pre>
</div>
<p>Obviously, there are some additional services that we need when these scenarios are executed &#8211; the app must be deployed and available along with a running selenium server. In the petstore example, the Maven cargo and selenium plugins are used for these purposes. Have a look at the full unexpurgated <a href="http://mikesamples.googlecode.com/svn/trunk/maven/jpetstore-maven-multi-module/jpetstore-maven-functional-tests/pom.xml" target="_blank">pom.xml</a> to see how they are configured.</p>
<h2>Running The Example </h2>
<p>Prerequisites are a Subversion client, Maven 2.2.x, Java 1.6.x and Firefox installed. Localhost ports 8080 and 4444 need to be unoccupied too.
<p>Check out the project:</p>
<div style="background-color:#f5f5f5;overflow:auto;">
<pre style="font:.9em 'Courier New', Courier;">
<code>
~$ svn co https://mikesamples.googlecode.com/svn/trunk/maven/jpetstore-maven-multi-module/ jpetstore
~$ cd jpetstore
</code>
</pre>
</div>
<p>Run the Maven build:</p>
<div style="background-color:#f5f5f5;overflow:auto;">
<pre style="font:.9em 'Courier New', Courier;">
<code>
~$ mvn clean install -Pmikeci,run-functional-tests,run-on-desktop
</code>
</pre>
</div>
<p>Et voila, this should build the JPetstore web app, deploy it to Jetty, start Selenium and run two JBehave scenarios against it. You could use this example to bootstrap your own JBehave/Selenium implementation and get started with BDD in no time at all.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikeciblogs.wordpress.com/397/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikeciblogs.wordpress.com/397/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikeciblogs.wordpress.com/397/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikeciblogs.wordpress.com/397/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikeciblogs.wordpress.com/397/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikeciblogs.wordpress.com/397/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikeciblogs.wordpress.com/397/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikeciblogs.wordpress.com/397/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikeciblogs.wordpress.com/397/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikeciblogs.wordpress.com/397/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikeciblogs.wordpress.com/397/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikeciblogs.wordpress.com/397/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikeciblogs.wordpress.com/397/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikeciblogs.wordpress.com/397/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=397&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.mikeci.com/2010/05/06/continuous-testing-with-selenium-and-jbehave-using-page-objects/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bbd65c96c65948362f981d0f5cb8a86e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Adam</media:title>
		</media:content>
	</item>
		<item>
		<title>Continuous Integration for Agile Project Managers (Part 2)</title>
		<link>http://blogs.mikeci.com/2010/04/27/continuous-integration-for-agile-project-managers-part-2/</link>
		<comments>http://blogs.mikeci.com/2010/04/27/continuous-integration-for-agile-project-managers-part-2/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 08:13:41 +0000</pubDate>
		<dc:creator>Adam Leggett</dc:creator>
				<category><![CDATA[Build Management]]></category>
		<category><![CDATA[Development process and tools]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[development tools]]></category>
		<category><![CDATA[static analysis]]></category>
		<category><![CDATA[code coverage]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://blogs.mikeci.com/?p=375</guid>
		<description><![CDATA[In part 1 of this series, I described the essential elements of Continuous Integration within the context of agile development and briefly discussed the software options for a CI server. I explained that the building blocks of CI are a version control system and a build management tool. The former creates the foundation, by giving [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=375&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://blogs.mikeci.com/2010/03/30/continuous-integration-for-agile-project-managers-part-1/">part 1</a> of this series, I described the essential elements of <b>Continuous Integration</b> within the context of <b>agile development</b> and briefly discussed the software options for a CI server. I explained that the building blocks of CI are a version control system and a build management tool. The former creates the foundation, by giving the CI process access to the latest copy of project source code. The latter then takes the source code and, in most scenarios, transforms it into the deployable binary artefact that represents the software application being developed.
</p>
<p>It is useful to consider this transformational process as a series of steps or life-cycle phases. By analyzing our build in this conceptual way, we can better understand how to &#8216;bind&#8217; or attach actions to each distinct life-cycle phase. Why is this important? Well, using this simple idea I can demonstrate how you can hardwire quality checks into to your CI process. Performing such checks, and publishing their results, means that we can really start to take advantage of the significant benefits CI can bring to your agile projects.
</p>
<p>I actually prefer the term &#8216;<b>quality gate</b>&#8216; as opposed to &#8216;quality check&#8217; as it better fits the idea that you must pass through one gate before entering another. In each case, if we are unable to pass through the gate, we can choose to fail the build and our CI system should dispatch a notification to us. In addition, a good CI process will publish the metrics and &#8216;violations&#8217; concerning each gate, so that they can be reviewed in detail after each build has occurred.</p>
<h2>Build Life-Cycle Phases and Quality Gates</h2>
<h3>Phase 1 &#8211; Resolve component dependencies</h3>
<p>Often our projects will have dependencies on other internal or third-party components. This is very common for example, in the <b>Java</b> or <b>Ruby</b> programming language worlds where the re-use of packaged binary artefacts (JAR&#8217;s for the former and <a href="http://rubygems.org/" target="_blank">Gem&#8217;s</a> for the latter) is considered best practice. One key attribute of a released component is its version (e.g. 2.1.1) and it is here we can apply our first simple gate &#8211; ensure that we are using the correct versions of our dependent components.</p>
<h3>Phase 2 &#8211; Static Analysis of the source code</h3>
<p>
Source code inspection is (or should be) a integral part of your software development process. Often this requires human beings(!) to perform formal <a href="http://www.practiceagile.com/2009/07/how-can-code-reviews-help-in-agile.html" target="_blank">code reviews</a> who possess an understanding of the software requirements and application design. However, we can automate much of this using <a href="http://agilesoftwaredevelopment.com/blog/pbielicki/how-ensure-code-quality" target="_blank">tooling integrated into the build process</a>. Some examples of inspection that we can perform are</p>
<ul>
<li>Adherence to organisational coding standards (e.g. all source files must start with a copyright statement, all functions should be commented)</li>
<li>Finding duplicated, or copied and pasted code statements.</li>
<li>Finding garden variety programming mistakes.</li>
<li>Adherence to architectural design rules.</li>
</ul>
<h3>Phase 2 &#8211;  Compilation of the source code</h3>
<p>If you are writing software using a programming language that needs to be compiled, such as Java or C++, this is obviously a very basic and essential gate to pass through.</p>
<h3>Phase 4 &#8211; Execution of unit tests and test coverage analysis</h3>
<p>We should always seek to execute the unit tests. Indeed, for some build management tools, this is the default setting and we can impose a gate that fails the build if unit tests do not pass.</p>
<p>The ability to write robust unit tests, that can be repeatedly executed in an automated fashion, in different environments, is one of the hallmarks of a good software developer IMHO. Wiring the execution of these tests into the CI process via the build tool, helps us to ensure that the tests do not contain dependencies on a developer&#8217;s local environment &#8211; a mistake more junior team members often make.  However, how can we determine that the tests are actually doing something useful, and exercising appropriate functions or routines within the application code? This is accomplished using a code coverage analysis tool (such as <a href="http://blog.twg.ca/2009/12/remember-rcov/" target="_blank">Rcov</a>), which can highlight those areas of the code-base untroubled by testing. Gates can be set as course-grained thresholds, e.g. trigger a build failure if less than 80% of all application code is being tested, or more granular configurations can be applied.</p>
<h3>Phase 5 &#8211; Packaging the application</h3>
<p>Although we normally don&#8217;t attribute a quality gate to this phase, it is often useful during the CI process to embed information into the packaged application for the purposes of traceability and provenance. For example, this can help identify the source code origin or &#8216;tag&#8217; of an application deployed to a testing environment when defects are found.</p>
<div id="attachment_377" class="wp-caption aligncenter" style="width: 460px"><a href="http://mikeciblogs.files.wordpress.com/2010/04/qgates.png"><img src="http://mikeciblogs.files.wordpress.com/2010/04/qgates.png?w=450&#038;h=261" alt="Quality Gates" title="qgates" width="450" height="261" class="size-full wp-image-377" /></a><p class="wp-caption-text">Quality Gates and Lifecycle Phases</p></div>
<h2>Summary</h2>
<p>Hopefully, I&#8217;ve demonstrated how CI, in addition to continuously integrating the source code developed by your team, can also provide a valuable feedback loop with respect to the quality of the software being created. In the next part, we&#8217;ll look into some options for applying &#8216;functional&#8217; quality gates within the CI process using advanced testing automation.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikeciblogs.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikeciblogs.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikeciblogs.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikeciblogs.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikeciblogs.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikeciblogs.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikeciblogs.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikeciblogs.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikeciblogs.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikeciblogs.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikeciblogs.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikeciblogs.wordpress.com/375/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikeciblogs.wordpress.com/375/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikeciblogs.wordpress.com/375/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=375&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.mikeci.com/2010/04/27/continuous-integration-for-agile-project-managers-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bbd65c96c65948362f981d0f5cb8a86e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Adam</media:title>
		</media:content>

		<media:content url="http://mikeciblogs.files.wordpress.com/2010/04/qgates.png" medium="image">
			<media:title type="html">qgates</media:title>
		</media:content>
	</item>
		<item>
		<title>User Review of Mike</title>
		<link>http://blogs.mikeci.com/2010/04/09/user-review-of-mike/</link>
		<comments>http://blogs.mikeci.com/2010/04/09/user-review-of-mike/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 11:01:45 +0000</pubDate>
		<dc:creator>Adam Leggett</dc:creator>
				<category><![CDATA[Build Management]]></category>
		<category><![CDATA[Development process and tools]]></category>
		<category><![CDATA[Mike news]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[functional testing]]></category>
		<category><![CDATA[reviews]]></category>

		<guid isPermaLink="false">http://blogs.mikeci.com/?p=366</guid>
		<description><![CDATA[One of our users, Ben Wilcock, has written on his blog about his experiences getting started with Mike. His project is a bleeding edge demonstration of how to implement RESTful services using HyperJaxb. It is built using Maven2 and the build showcases a full end-to-end functional test and deployment of a JEE6 web application. His [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=366&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of our users, <a href="http://benwilcock.wordpress.com/" target="_blank">Ben Wilcock</a>, has written on his blog about his experiences <a href="http://benwilcock.wordpress.com/2010/03/31/restful-service-with-hyperjaxb3-part-5-%E2%80%93-ci-with-mike/" target="_blank">getting started with Mike</a>.</p>
<p>His project is a bleeding edge demonstration of how to implement RESTful services using <a href="https://hyperjaxb3.dev.java.net/" target="_blank">HyperJaxb</a>. It is built using Maven2 and the build showcases a full end-to-end functional test and deployment of a JEE6 web application.</p>
<p>His Maven build takes advantage of some the new features we have recently added to Mike, in particular the freedom to spawn or fork additional processes (such as application containers or bash scripts) during a build, all within a secure, sand-boxed environment.</p>
<p>As Ben himself says, </p>
<blockquote><p>&#8220;Considering my project’s build includes starting and stopping an embedded Glassfish container and running SoapUI integration tests – I was amazed at just how easy it actually was!&#8221;.</p></blockquote>
<p>Be sure to check out his informative <a href="http://benwilcock.wordpress.com/tag/hyperjaxb3/" target="_blank">series of entries</a> about his experiences with both Mike and other aspects of his innovative project.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikeciblogs.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikeciblogs.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikeciblogs.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikeciblogs.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikeciblogs.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikeciblogs.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikeciblogs.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikeciblogs.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikeciblogs.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikeciblogs.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikeciblogs.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikeciblogs.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikeciblogs.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikeciblogs.wordpress.com/366/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=366&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.mikeci.com/2010/04/09/user-review-of-mike/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bbd65c96c65948362f981d0f5cb8a86e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Adam</media:title>
		</media:content>
	</item>
		<item>
		<title>A Sneak Preview of our Ruby/Rake support</title>
		<link>http://blogs.mikeci.com/2010/04/06/a-sneak-preview-of-our-rubyrake-support/</link>
		<comments>http://blogs.mikeci.com/2010/04/06/a-sneak-preview-of-our-rubyrake-support/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 15:57:31 +0000</pubDate>
		<dc:creator>Adam Leggett</dc:creator>
				<category><![CDATA[Build Management]]></category>
		<category><![CDATA[Development process and tools]]></category>
		<category><![CDATA[Mike news]]></category>
		<category><![CDATA[Roadmap]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Rake]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Gems]]></category>

		<guid isPermaLink="false">http://blogs.mikeci.com/?p=353</guid>
		<description><![CDATA[Here at Mike HQ we are getting close to releasing support for the extremely popular Rake Ruby language-based build tool. A key element of our mission at Mike is to extend the capabilities of our platform beyond those required by the Java development world, and this will be the first major step in that direction. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=353&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Here at Mike HQ we are getting close to releasing support for the extremely popular <a href="http://rake.rubyforge.org/" target="_blank">Rake</a> Ruby language-based build tool.
<p>A key element of our mission at Mike is to extend the capabilities of our platform beyond those required by the Java development world, and this will be the first major step in that direction.</p>
<p>At the moment we are testing the feature using a range of open source Ruby-based projects. Here are a couple of screen-shots of the configuration and console output from our build of <a href="http://haml-lang.com/" target="blank">Haml</a>, a popular templating engine for Rails apps:</p>
<div id="attachment_359" class="wp-caption aligncenter" style="width: 460px"><a href="http://mikeciblogs.files.wordpress.com/2010/04/haml-rake-config.png"><img src="http://mikeciblogs.files.wordpress.com/2010/04/haml-rake-config.png?w=450&#038;h=253" alt="Haml Rake Configuration" title="haml-rake-config" width="450" height="253" class="size-full wp-image-359" /></a><p class="wp-caption-text">Haml Rake configuration</p></div>
<div id="attachment_363" class="wp-caption aligncenter" style="width: 460px"><a href="http://mikeciblogs.files.wordpress.com/2010/04/haml-console1.png"><img src="http://mikeciblogs.files.wordpress.com/2010/04/haml-console1.png?w=450&#038;h=204" alt="Haml build console output" title="haml-console" width="450" height="204" class="size-full wp-image-363" /></a><p class="wp-caption-text">Haml build console output</p></div>
<p>One nifty feature we are adding is the ability to specify the required Gems for your Rake build, which is intended to provide our users with full control of dependencies, and to avoid what we believe to be one of the most common reasons for build failures using Rake.</p>
<p>Stay tuned for further details&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikeciblogs.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikeciblogs.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikeciblogs.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikeciblogs.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikeciblogs.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikeciblogs.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikeciblogs.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikeciblogs.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikeciblogs.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikeciblogs.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikeciblogs.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikeciblogs.wordpress.com/353/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikeciblogs.wordpress.com/353/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikeciblogs.wordpress.com/353/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=353&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.mikeci.com/2010/04/06/a-sneak-preview-of-our-rubyrake-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bbd65c96c65948362f981d0f5cb8a86e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Adam</media:title>
		</media:content>

		<media:content url="http://mikeciblogs.files.wordpress.com/2010/04/haml-rake-config.png" medium="image">
			<media:title type="html">haml-rake-config</media:title>
		</media:content>

		<media:content url="http://mikeciblogs.files.wordpress.com/2010/04/haml-console1.png" medium="image">
			<media:title type="html">haml-console</media:title>
		</media:content>
	</item>
		<item>
		<title>Continuous Integration for Agile Project Managers (Part 1)</title>
		<link>http://blogs.mikeci.com/2010/03/30/continuous-integration-for-agile-project-managers-part-1/</link>
		<comments>http://blogs.mikeci.com/2010/03/30/continuous-integration-for-agile-project-managers-part-1/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 11:49:11 +0000</pubDate>
		<dc:creator>Adam Leggett</dc:creator>
				<category><![CDATA[Build Management]]></category>
		<category><![CDATA[Development process and tools]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Ant]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[software builds]]></category>

		<guid isPermaLink="false">http://blogs.mikeci.com/?p=332</guid>
		<description><![CDATA[Any Agile Project Manager worth his salt should be aware of the term ‘Continuous Integration’ (often shortened to ‘CI’). But what is it, and how is it done? This series of short blog articles aims to answer these two questions, so you can start your next project, or re-configure an existing project, armed with the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=332&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Any Agile Project Manager worth his salt should be aware of the term ‘Continuous Integration’ (often shortened to ‘CI’). But what is it, and how is it done?</p>
<p>This series of short blog articles aims to answer these two questions, so you can start your next project, or re-configure an existing project, armed with the necessary understanding about this key practice within agile software delivery.</p>
<h3>Background</h3>
<p>
The basic premise of CI is pretty straightforward. An agile team needs a repeatable and reliable method to create a build of the software under development. Why so? Well, if its not already obvious, you may want to revisit the principles behind the <a href="http://agilemanifesto.org/principles.html" target="_blank">Agile Manifesto</a>. Within them you will notice a number of references to ‘working software’, and the foundation of any working software is a stable, tested build.
</p>
<h3>Recipe for CI</h3>
<p>
So how does CI help to create this build? Lets list the essential ingredients that we need :</p>
<ol>
<li><b>Source Code Control</b> – in a typical agile project, developers turn User Stories into source code, in whatever programming language(s) the project is using. Once their work is at an appropriate level of completeness, they check-in or commit their work to the source code (a.k.a version) control system; for example, <a href="http://subversion.apache.org/" target="_blank">Subversion</a></li>
<li><b>Build Tool</b> – if the source code needs to be compiled (e.g. Java or C++) then we will need tooling to support that. Modern Integrated Developer Environments (IDE), such as <a href="http://www.eclipse.org" target="_blank">Eclipse</a> or Visual Studio are able to perform this task as developers save source code files. But if we want to build the software independently of an IDE in an automated fashion, say on a server environment, we need an additional tool to do this. Examples of this type of tool are <a href="http://ant.apache.org" target="_blank">Ant</a>, <a href="http://maven.apache.org" target="_blank">Maven</a> and Rake and Make. These tools can also package a binary output from the build. For example, with Java projects this might be a JAR or WAR file – the deployable unit that represents the application being developed.</li>
<li><b>Test Tools</b> – as part of the build process, in addition to compilation and the creation of binary outputs, we should also verify that (at minimum) the unit tests pass. For example, in Java these are often written using the <a href="http://junit.org/" target="_blank">JUnit</a> automated unit testing framework. The tools in (2) often natively support the running of such tests, so they should always be executed during a build. In addition to unit testing, there are numerous other quality checks we can perform and status reports CI can produce. I’ll cover these in detail in a subsequent part to this series.</li>
<li><b>Schedule or Trigger</b> – we might want to create our build according to a schedule (e.g ‘every afternoon’) or when there is a change in the state of the project source code. In the latter case we can set up a simple rule that triggers a build whenever a developer changes the state of the source code by committing his/her changes, as outlined in (1). This has the effect of ensuring that your teams work is continuously integrated to produce a stable build, and, as you may have guessed, is where this practice gets its name from.
</li>
<li><b>Notifications</b> – the team needs to know when a build fails, so it can respond and fix the issue. There are lots of ways to notify a team these days – instant messaging, Twitter etc, but the most common by far is still email.
</li>
<div id="attachment_340" class="wp-caption aligncenter" style="width: 435px"><a href="http://mikeciblogs.files.wordpress.com/2010/03/ci-diagram-agilepm-pt1.png"><img src="http://mikeciblogs.files.wordpress.com/2010/03/ci-diagram-agilepm-pt1.png?w=425&#038;h=672" alt="Continuous Integration Recipe" title="ci-diagram-agilepm-pt1" width="425" height="672" class="size-full wp-image-340" /></a><p class="wp-caption-text">Continuous Integration Recipe</p></div><br />
The tool that wires these five elements together is a <i>Continuous Integration Server</i>. It interacts with the source control system to obtain the latest revision of the code, launches the build tool (which also runs the unit tests) and notifies us of any failures. And it does this according to a schedule or state change based trigger. A CI server often also provides a web-based interface that allows a team to review the status, metrics and data associated with each build.
</p>
<h3>CI Server options</h3>
<p>
There is a pretty overwhelming choice of available tools in this space. Some are open source, some proprietary. I don’t have time to go into all the available options here unfortunately. However, there is a handy feature comparison matrix available <a href="http://confluence.public.thoughtworks.org/display/CC/CI+Feature+Matrix" target="_blank">here</a>. Of course, it would be remiss of me not to mention our <a href="http://mikeci.com">own hosted service</a>, which allows you to get started with CI in no time at all, without having to be an ‘expert’ user.</p>
<p><div id="attachment_346" class="wp-caption aligncenter" style="width: 460px"><a href="http://mikeciblogs.files.wordpress.com/2010/03/test-reports1.png"><img src="http://mikeciblogs.files.wordpress.com/2010/03/test-reports1.png?w=450&#038;h=235" alt="Mike Test Reports" title="test-reports" width="450" height="235" class="size-full wp-image-346" /></a><p class="wp-caption-text">Test Reports generated by Mike</p></div>
<p>
In the next part of this series, I’ll delve deeper into how you can use CI to enforce software quality within your team during the various stages of the development process.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikeciblogs.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikeciblogs.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikeciblogs.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikeciblogs.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikeciblogs.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikeciblogs.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikeciblogs.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikeciblogs.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikeciblogs.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikeciblogs.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikeciblogs.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikeciblogs.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikeciblogs.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikeciblogs.wordpress.com/332/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=332&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.mikeci.com/2010/03/30/continuous-integration-for-agile-project-managers-part-1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bbd65c96c65948362f981d0f5cb8a86e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Adam</media:title>
		</media:content>

		<media:content url="http://mikeciblogs.files.wordpress.com/2010/03/ci-diagram-agilepm-pt1.png" medium="image">
			<media:title type="html">ci-diagram-agilepm-pt1</media:title>
		</media:content>

		<media:content url="http://mikeciblogs.files.wordpress.com/2010/03/test-reports1.png" medium="image">
			<media:title type="html">test-reports</media:title>
		</media:content>
	</item>
		<item>
		<title>Bootstrap your Agile Java Startup Infrastructure in &lt; 30 minutes</title>
		<link>http://blogs.mikeci.com/2010/03/25/bootstrap-your-agile-java-startup-infrastructure-in-30-minutes/</link>
		<comments>http://blogs.mikeci.com/2010/03/25/bootstrap-your-agile-java-startup-infrastructure-in-30-minutes/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 12:15:01 +0000</pubDate>
		<dc:creator>Ben Leedham</dc:creator>
				<category><![CDATA[Build Management]]></category>
		<category><![CDATA[Development process and tools]]></category>
		<category><![CDATA[Roadmap]]></category>
		<category><![CDATA[hosted services]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[m2eclipse]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[appfuse]]></category>
		<category><![CDATA[fogbugz]]></category>
		<category><![CDATA[artifactory]]></category>

		<guid isPermaLink="false">http://blogs.mikeci.com/?p=313</guid>
		<description><![CDATA[So, you have a great idea for the next web-based killer application. You have assembled a small but geographically dispersed team with the requisite amount of Agile Java development-fu to get the job done. What you need now is some hosted infrastructure so you can all get to work effectively. In less than 30 minutes. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=313&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So, you have a great idea for the next web-based killer application. You have assembled a small but geographically dispersed team with the requisite amount of Agile Java development-fu to get the job done. What you need now is some hosted infrastructure so you can all get to work effectively.</p>
<p>In less than 30 minutes.</p>
<h3>Step 1 – Get some IDE</h3>
<p>Get <a href="http://www.eclipse.org/downloads/" target="_blank">Eclipse Galileo</a> (JEE version). Hopefully your pipe is fat enough (~190 MB download). Fire it up and use update sites to obtain <a href="http://m2eclipse.sonatype.org/" target="_blank">m2eclipse</a> and <a href="http://subclipse.tigris.org/" target="_blank">subclipse</a> (we’re assuming SVN for a repository, but you could use Git). Install Tomcat and configure as a server.</p>
<h3>Step 2 – Get some Scaffolding</h3>
<p>Within Eclipse go to File&gt;New&gt;Other, to open the Select a wizard dialog. From the scrollbox, select Maven Project and then click Next. Move through the wizard to select an archetype of an appropriate type (e.g. <a href="http://appfuse.org/display/APF/Home" target="_blank">Appfuse</a>). Click Finish. Validate you can build and deploy your app.</p>
<h3>Step 3 – Get some Version Control</h3>
<p>While you are waiting for your build to complete, pick a hosted version control provider. There are a number who provide low-cost or even free hosted Subversion for private projects, typically with a trial period. Here is a <a href="http://www.svnhostingcomparison.com/" target="_blank">list</a>. Once signed-up with a clean repository, use subclipse to share the scaffolding app created in (2).</p>
<h3>Step 4 – Get some Project Tracking and Wiki</h3>
<p>The majority of providers listed in (3) also offer something in the area of hosted task/issue tracking apps that often have sufficient wiki capabilities. Alternatively you can try those who specialise<br />
in this area such as <a href="http://www.fogcreek.com/FogBUGZ/" target="_blank">FogBugz</a> or <a href="http://www.agile42.com/cms/pages/support/" target="_blank">Agilo</a>. We use Agilo on Mike. And you might want to get <a href="http://basecamphq.com/" target="_blank">Basecamp</a>. We use that too.</p>
<h3>Step 5 – Get some CI</h3>
<p>You could roll your own on Amazon EC2, but that isn&#8217;t happening in 30 minutes or 30 hours, probably! Hmmm…Oh I almost forgot – you could use <a href="http://mikeci.com/pricing.htm" target="_blank">our excellent hosted service</a> <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<h3>Step 6 – Get some BRM</h3>
<p>Whats a BRM? Its Binary Repository Manager. If you’re using Maven, I’d recommend you use one. The only hosted one I’m aware of is provided by <a href="http://www.jfrog.org/art-online.php" target="_blank">Artifactory Online</a>.</p>
<p>Right. We are good to go. What are you waiting for?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikeciblogs.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikeciblogs.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikeciblogs.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikeciblogs.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikeciblogs.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikeciblogs.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikeciblogs.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikeciblogs.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikeciblogs.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikeciblogs.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikeciblogs.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikeciblogs.wordpress.com/313/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikeciblogs.wordpress.com/313/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikeciblogs.wordpress.com/313/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=313&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.mikeci.com/2010/03/25/bootstrap-your-agile-java-startup-infrastructure-in-30-minutes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a75569e7ff48f8b10455dc8bade5cd72?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">benleedham</media:title>
		</media:content>
	</item>
		<item>
		<title>New Mike Release with GitHub integration and Functional Testing support</title>
		<link>http://blogs.mikeci.com/2010/03/18/new-mike-release-with-github-integration-and-functional-testing-support/</link>
		<comments>http://blogs.mikeci.com/2010/03/18/new-mike-release-with-github-integration-and-functional-testing-support/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 11:03:54 +0000</pubDate>
		<dc:creator>Adam Leggett</dc:creator>
				<category><![CDATA[Build Management]]></category>
		<category><![CDATA[Development process and tools]]></category>
		<category><![CDATA[Mike news]]></category>
		<category><![CDATA[Roadmap]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Ant]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Gravatar]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[Jetty]]></category>
		<category><![CDATA[Glassfish]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[HTMLUnit]]></category>
		<category><![CDATA[JWebUnit]]></category>

		<guid isPermaLink="false">http://blogs.mikeci.com/?p=300</guid>
		<description><![CDATA[We are very pleased to be able announce a new release of our hosted CI platform. The release includes some major enhancements to allow our users to do much more with their builds while at the same time ensuring that they happen within a highly secure, controlled environment. Here is summary of the new features: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=300&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We are very pleased to be able announce a new release of our hosted CI platform. The release includes some major enhancements to allow our users to do much more with their builds while at the same time ensuring that they happen within a highly secure, controlled environment.</p>
<p>Here is summary of the new features:</p>
<p>CI support for projects hosted within public or private <a href="http://www.github.com" target="_blank"><b>GitHub</b></a> repositories that use Ant, Maven or Eclipse.</p>
<p>Each build is now executed in an entirely separated environment, which allows our users to:</p>
<ul>
<li>Start, stop and deploy to embedded containers as part of their build process (e.g. Jetty or Glassfish).</li>
<li>Start, stop and deploy to provided (by Mike) instances of Apache Tomcat (v5 and 6) as part of their build process.</li>
<li>Run integration and functional tests, using frameworks such as <a href="http://htmlunit.sourceforge.net/" target="_blank">HtmlUnit</a> or <a href="http://jwebunit.sourceforge.net/" target="_blank">JWebUnit</a> against applications deployed to said containers or instances.</li>
<li>Fork additional processes as part of a build, such as bash scripts and other non-Java based tooling.</li>
<li>Use the full range of available Ant tasks and Maven plug-ins as part of a build.</li>
</ul>
<p>Security hardening:</p>
<ul>
<li>All network communication within Mike is encrypted using either key or token-based authentication.</li>
<li>All outbound network access from a build is transparently proxied and validated.</li>
<li>IP protection: all builds run in a clean, repeatable sand-boxed environment and all source code processed by a build is accessed using token-based authentication over encrypted channels. See the <a href="http://mikeci.com/security.htm" target="_blank">security section</a> of our website for further details</li>
</ul>
<p>Also:</p>
<ul>
<li>Support for <a href="http://maven.apache.org/ant-tasks/index.html" target="_blank">Maven Ant Tasks</a> (v2.1.0) – Ant-based projects can now use Maven dependency management for their binary artefacts.</li>
<li><a href="http://www.gravatar.com" target="_blank">Gravatar</a> integration for developer email addresses.</li>
</ul>
<p>
Be sure to check out our no-obligation, <a href="http://mikeci.com/pricing.htm" target="_blank"><b>14-day trial</b></a>. You simply need to provide us with your company/project name and an email address. You can also use our sample applications to rapidly get started and experience our platform features. Our prices start from <a href="http://mikeci.com/pricing.htm" target="_blank"><b>only $10 per month</b></a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikeciblogs.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikeciblogs.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mikeciblogs.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mikeciblogs.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mikeciblogs.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mikeciblogs.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mikeciblogs.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mikeciblogs.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mikeciblogs.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mikeciblogs.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mikeciblogs.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mikeciblogs.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mikeciblogs.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mikeciblogs.wordpress.com/300/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blogs.mikeci.com&amp;blog=10012787&amp;post=300&amp;subd=mikeciblogs&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blogs.mikeci.com/2010/03/18/new-mike-release-with-github-integration-and-functional-testing-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/bbd65c96c65948362f981d0f5cb8a86e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Adam</media:title>
		</media:content>
	</item>
	</channel>
</rss>