<?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/"
	>

<channel>
	<title>Mike Willbanks</title>
	<atom:link href="http://blog.digitalstruct.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.digitalstruct.com</link>
	<description>Getting inside the mind of a php developer.</description>
	<lastBuildDate>Tue, 02 Mar 2010 15:04:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PHP Continuous Integration with Atlassian Bamboo</title>
		<link>http://blog.digitalstruct.com/2010/03/01/php-continuous-integration-with-atlassian-bamboo/</link>
		<comments>http://blog.digitalstruct.com/2010/03/01/php-continuous-integration-with-atlassian-bamboo/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 02:46:09 +0000</pubDate>
		<dc:creator>Mike Willbanks</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.digitalstruct.com/?p=113</guid>
		<description><![CDATA[Continuous integration is all the rage these days; you are unit testing your code are you not?  During some consulting in January with the help of Sebastian Bergmann, from thePHP.cc, we setup continuous integration utilizing Atlassian Bamboo and received training on PHPUnit.
Using Atlassian Bamboo for continuous integration will take you a bit to setup, [...]]]></description>
			<content:encoded><![CDATA[<p>Continuous integration is all the rage these days; you are unit testing your code are you not?  During some consulting in January with the help of <a href="http://sebastian-bergmann.de">Sebastian Bergmann</a>, from <a href="http://thephp.cc/">thePHP.cc</a>, we setup continuous integration utilizing Atlassian Bamboo and received training on <a href="http://www.phpunit.de/">PHPUnit</a>.</p>
<p>Using Atlassian Bamboo for continuous integration will take you a bit to setup, however, I have found it to be an invaluable tool when utilizing the Atlassian stack (JIRA, Confluence, Crucible, Bamboo and Crowd).</p>
<h2>Overview</h2>
<p>This posting assumes the following:</p>
<ul>
<li>You have Atlassian Bamboo setup</li>
<li>Ant is available on the system</li>
<li>You already have PHPUnit setup for your project</li>
<li>You have selected a coding standard</li>
</ul>
<p>This posting will go over the following:</p>
<ul>
<li>Getting Started</li>
<li>PHP Depend</li>
<li>PHP Code Browser</li>
<li>PHP Code Sniffer</li>
<li>PHP Copy/Paste Detector</li>
<li>PHP Mess Detector</li>
<li>PHPUnit</li>
</ul>
<h2>Getting Started</h2>
<p>Welcome to the voyage of continuous integration with Bamboo, now that you are ready, lets get started.</p>
<h3>Installing the PHP Tools</h3>
<p>We will assume using the PEAR installer for installing all of the tools.</p>
<h4><a href="http://pdepend.org">PHP Depend</a></h4>
<p><code>pear channel-discover pear.pdepend.org<br />
pear install pdepend/PHP_Depend-beta</code></p>
<h4><a href="http://github.com/mayflowergmbh/PHP_CodeBrowser">PHP Code Browser</a></h4>
<p><code>pear channel-discover pear.phpunit.de<br />
pear install phpunit/PHP_CodeBrowser-alpha</code></p>
<h4><a href="http://pear.php.net/package/PHP_CodeSniffer">PHP Code Sniffer</a></h4>
<p><code>pear install PHP_CodeSniffer</code></p>
<h4><a href="http://github.com/sebastianbergmann/phpcpd">PHP Copy/Paste Detector</a></h4>
<p><code>pear install phpunit/phpcpd</code></p>
<h4><a href="http://phpmd.org/about.html">PHP Mess Detector</a></h4>
<p><code>pear channel-discover pear.phpmd.org<br />
pear install --alldeps phpmd/PHP_PMD-beta</code></p>
<h4><a href="http://www.phpunit.de">PHPUnit</a></h4>
<p><code>pear install phpunit/PHPUnit</code></p>
<h3>Build Setup in Bamboo</h3>
<h4>The Plugins</h4>
<p>There are a few plugins that we will utilize to capture build metrics.  You will want to install these to follow along:</p>
<ul>
<li><a href="https://plugins.atlassian.com/plugin/details/5825">Bamboo Checkstyle Plugin</a></li>
<li><a href="https://plugins.atlassian.com/plugin/details/5987">PMD Plugin</a></li>
</ul>
<h4>Plan Details</h4>
<p>Assuming that you are new to Bamboo and have not created a build as of yet, you will need to login to Bamboo and then click on &#8220;Create Plan&#8221; in the navigation.  Here you will find a few options, most of these are self explanatory.  Just remember that you can have several different builds so you may want to specify if it is a trunk build or a specific component build.  Once you are completed, click on next.</p>
<h4>Source Repository</h4>
<p>Put in the details to your source code repository.  If the source code repository is not available, there is likely a plug-in for it available.  Download it, restart bamboo, and continue to this step.  We do not force a clean build every time, this is due to some additional configuration that we have set for an environment in a configuration file and to reduce the amount of time to do a build.  Lastly, we do polling to detect if we need to do a build.  This helps us because we do not want a 5 minute build during every change but rather within 10 minutes of any change.  This helps reduce building too frequently or causing a potential for a race condition (assuming there was a bug in Bamboo). Go to the next step&#8230;</p>
<h4>Builder</h4>
<p>Let&#8217;s use ant for the build process.  Do not worry about this for now, we will get more into the ant build script later on.  State the build file as &#8220;build.xml&#8221; which will live in the main root of the source code (you could place this elsewhere but for simplicity sakes lets put it here and assume you&#8217;re not storing the htdocs at the root &#8211; please tell me you&#8217;re not).  Under target place &#8220;clean build&#8221; since we will do some manual cleanup of existing build information.</p>
<p>Under the following questions you will want to fill out information:</p>
<ul>
<li>Where should Bamboo look for the test result files?
<ul>
<li>Check: &#8220;The build will produce test results.&#8221;</li>
<li>Specify custom results directories: &#8220;**/build/logs/phpunit.xml&#8221;</li>
</ul>
</li>
<li>Where should Bamboo look for the PMD code analysis output?
<ul>
<li>Check: &#8220;PMD output will be produced&#8221;</li>
<li>PMD XML Directory: &#8220;**/build/logs/pmd*.xml&#8221;</li>
</ul>
</li>
<li>Would you like to view Clover Code Coverage for this plan?
<ul>
<li>Check: &#8220;Use Clover to collect Code Coverage for this build.&#8221;</li>
<li>Integration Options: Select &#8220;Clover is already integrated into this build&#8230;&#8221;</li>
<li>Clover XML Location: &#8220;**/build/logs/clover.xml&#8221;</li>
</ul>
</li>
<li>Where should Bamboo look for the CheckStyle style analysis output?
<ul>
<li>Check: &#8220;CheckStyle output will be produced&#8221;</li>
<li>CheckStyle Output Directory: &#8220;**/build/logs/checkstyle.xml&#8221;</li>
<li>We left the rest of the options blank as we have a few areas to catch up on &#8211; don&#8217;t we all?</li>
</ul>
</li>
</ul>
<p>Now go on, the hard work is just about done for setting up the build&#8230;</p>
<h4>Requirements</h4>
<p>In this screen you should see that the JDK is available and Ant is available. Go on&#8230;</p>
<h4>Artifacts</h4>
<p>We are producing several artifacts that we produce during every build, you may want to as well, therefore, lets get them all setup.  Don&#8217;t worry about what all of these are at the moment, you will have a better idea later.</p>
<table>
<thead>
<tr>
<th>Label</th>
<th>Source Directory</th>
<th>Copy Pattern</th>
</tr>
</thead>
<tbody>
<tr>
<td>Dependency Report</td>
<td>build/dependencies</td>
<td>**/*.*</td>
</tr>
<tr>
<td>CheckStyle</td>
<td>build/logs</td>
<td>**/checkstyle.xml</td>
</tr>
<tr>
<td>Code Coverage Report</td>
<td>build/coverage</td>
<td>**/*.*</td>
</tr>
<tr>
<td>PHP CPD</td>
<td>build/logs</td>
<td>**/pmd-cpd.xml</td>
</tr>
<tr>
<td>CPD Report</td>
<td>build/cpd</td>
<td>**/*.*</td>
</tr>
<tr>
<td>PHPUnit</td>
<td>build/logs</td>
<td>**/phpunit.xml</td>
</tr>
<tr>
<td>Clover</td>
<td>build/logs</td>
<td>**/clover.xml</td>
</tr>
<tr>
<td>JDepend</td>
<td>build/logs</td>
<td>**/jdepend.xml</td>
</tr>
<tr>
<td>Code Browser</td>
<td>build/codebrowser</td>
<td>**/*.*</td>
</tr>
</tbody>
</table>
<h4>Notifications</h4>
<p>Determine the types of notifications that you are looking for, I simply have myself notified on every build and a different level to ensure that the notification goes out to anyone that has been attributed to a failed build.  This is solely up to you and you can change it all later if you would like to.</p>
<h4>Post Actions</h4>
<p>We currently are not utilizing these, but I am sure that someone will find some more use for them, I am thinking of things like deploying to our testing environment, however, that&#8217;s more than a leap away at this point.</p>
<h4>Permissions</h4>
<p>Setup the permissions that you would like to have on the build plan, this is really up to you.</p>
<p>Finish up and save your build plan.  Now you will have a failing build as we need to get it up and running.</p>
<h3>Setting up Ant</h3>
<p>Since we specified the Ant builder, we need to setup our build.xml file in the directory root of the source control that we are utilizing.  In here, we want to run our tasks in parallel to expedite our processing and then run our unit testing. The following is our build.xml file, without a few excludes and such:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;project</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;My Project Name&quot;</span> <span style="color: #000066;">default</span>=<span style="color: #ff0000;">&quot;build&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;clean&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;delete</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}/build&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;prepare&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}/build/logs&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}/build/codebrowser&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}/build/coverage&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}/build/cpd&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}/build/dependencies&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;phpcs&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}&quot;</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;phpcs&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000066;">output</span>=<span style="color: #ff0000;">&quot;/dev/null&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">line</span>=<span style="color: #ff0000;">&quot;--extensions=php --ignore=build/*,tests/* --standard=Zend --tab-width=4 --report=checkstyle --report-file=${basedir}/build/logs/checkstyle.xml .&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;phpmd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}&quot;</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;phpmd&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">line</span>=<span style="color: #ff0000;">&quot;. xml codesize --reportfile ${basedir}/build/logs/pmd.xml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;phpcpd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}&quot;</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;phpcpd&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">line</span>=<span style="color: #ff0000;">&quot;--log-pmd=${basedir}/build/logs/pmd-cpd.xml</span>
<span style="color: #009900;">                       --exclude=build</span>
<span style="color: #009900;">                       --exclude=tests</span>
<span style="color: #009900;">                       .&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}/build/logs&quot;</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;xsltproc&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000066;">output</span>=<span style="color: #ff0000;">&quot;${basedir}/build/cpd/index.html&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">line</span>=<span style="color: #ff0000;">&quot;/path/to/cpd.xsl ${basedir}/build/logs/pmd-cpd.xml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;pdepend&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}&quot;</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;pdepend&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">line</span>=<span style="color: #ff0000;">&quot;--jdepend-xml=${basedir}/build/logs/jdepend.xml</span>
<span style="color: #009900;">                       --jdepend-chart=${basedir}/build/dependencies/jdepend.svg</span>
<span style="color: #009900;">                       --overview-pyramid=${basedir}/build/dependencies/pyramid.svg</span>
<span style="color: #009900;">                       --optimization=best</span>
<span style="color: #009900;">                       --exclude=build,tests</span>
<span style="color: #009900;">                       .&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}/build/dependencies&quot;</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;cp&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">line</span>=<span style="color: #ff0000;">&quot;${basedir}/path/to/dependencies.html index.html&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;phpcb&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}&quot;</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;phpcb&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">line</span>=<span style="color: #ff0000;">&quot;--log ${basedir}/build/logs --source ${basedir} --output ${basedir}/build/codebrowser&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;phpunit&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;exec</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${basedir}/tests&quot;</span> <span style="color: #000066;">executable</span>=<span style="color: #ff0000;">&quot;phpunit&quot;</span> <span style="color: #000066;">failonerror</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;arg</span> <span style="color: #000066;">line</span>=<span style="color: #ff0000;">&quot;--log-junit ${basedir}/build/logs/phpunit.xml</span>
<span style="color: #009900;">                       --coverage-clover ${basedir}/build/logs/clover.xml</span>
<span style="color: #009900;">                       --coverage-html ${basedir}/build/coverage&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/exec<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;parallel&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;parallel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;antcall</span> <span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;phpcs&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;antcall</span> <span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;phpmd&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;antcall</span> <span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;phpcpd&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;antcall</span> <span style="color: #000066;">target</span>=<span style="color: #ff0000;">&quot;pdepend&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/parallel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;build&quot;</span> <span style="color: #000066;">depends</span>=<span style="color: #ff0000;">&quot;clean,prepare,parallel,phpunit,phpcb&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/project<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<h4>Additional Files Referenced</h4>
<p>I referenced a few files above that you will not have, mainly these files help to display some of the components that we have pushed out into our Artifacts.  I&#8217;ve linked one file and given what is in another for reference.</p>
<ul>
<li><a href="http://source.flexive.org/browse/~raw,r=461/fleXive/trunk/lib/pmd/xslt/cpdhtml.xslt">cpd.xsl</a></li>
<li>dependencies.html &#8211; a simple file that embeds the svg images.</li>
</ul>
<h2>exit(0);</h2>
<p>This should help you get up and running with Atlassian Bamboo for PHP.  We&#8217;ve been using this for the last 3+ months and it has been extremely valuable.  If you have any feedback or anything to add let me know through the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.digitalstruct.com/2010/03/01/php-continuous-integration-with-atlassian-bamboo/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>The Art of Message Queues</title>
		<link>http://blog.digitalstruct.com/2009/11/23/the-art-of-message-queues/</link>
		<comments>http://blog.digitalstruct.com/2009/11/23/the-art-of-message-queues/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 02:31:57 +0000</pubDate>
		<dc:creator>Mike Willbanks</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.digitalstruct.com/?p=111</guid>
		<description><![CDATA[At MinneBar I had done a talk on Message Queues.  This talk went fairly well for being the first time I have given this besides just in talking and rambling with other folks.  Thank you all for the feedback on the presentation and demos!  I will incorporate this into the next time [...]]]></description>
			<content:encoded><![CDATA[<p>At MinneBar I had done a talk on Message Queues.  This talk went fairly well for being the first time I have given this besides just in talking and rambling with other folks.  Thank you all for the feedback on the presentation and demos!  I will incorporate this into the next time that I give the talk.</p>
<p>As stated the slides are below, there is a little cut off and I am not sure if MinneBar did record the video in that session so you will have to see when they release the information.  Below are the slides of this presentation.</p>
<object width="500" height="410"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=art-of-message-queues-091123105634-phpapp02"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=art-of-message-queues-091123105634-phpapp02"  type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="410"></embed></object><!-- ysttest:Array
(
    [id] => 2566308&#038;doc=art-of-message-queues-091123105634-phpapp02
)
-->
]]></content:encoded>
			<wfw:commentRss>http://blog.digitalstruct.com/2009/11/23/the-art-of-message-queues/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Handling Database Deployments</title>
		<link>http://blog.digitalstruct.com/2009/10/27/handling-database-deployments/</link>
		<comments>http://blog.digitalstruct.com/2009/10/27/handling-database-deployments/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 17:28:25 +0000</pubDate>
		<dc:creator>Mike Willbanks</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.digitalstruct.com/?p=109</guid>
		<description><![CDATA[I presented during the Unconference at ZendCon 2009 on Handling Database Deployments.  I have posted the slides up on slideshare and you can find them embedded below:
Overall it was a great experience, I have put in a few of the examples in the slides.  Slideshare did cut a few slides off so you [...]]]></description>
			<content:encoded><![CDATA[<p>I presented during the Unconference at ZendCon 2009 on Handling Database Deployments.  I have posted the slides up on slideshare and you can find them embedded below:<br />
<object width="500" height="410"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=zendcon-uncon-2009-db-deployment-091021171814-phpapp01"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=zendcon-uncon-2009-db-deployment-091021171814-phpapp01"  type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="410"></embed></object><!-- ysttest:Array
(
    [id] => 2314150&#038;doc=zendcon-uncon-2009-db-deployment-091021171814-phpapp01
)
--></p>
<p>Overall it was a great experience, I have put in a few of the examples in the slides.  Slideshare did cut a few slides off so you might want to download the slides to ensure that you can view them.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.digitalstruct.com/2009/10/27/handling-database-deployments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
