<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>John's Blog - Code Complete</title>
    <link>http://johnjthomas.net/</link>
    <description>A Technical Journal, and other writings</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.4.1 - http://www.s9y.org/</generator>
    <pubDate>Sun, 25 Oct 2009 15:23:22 GMT</pubDate>

    <image>
        <url>http://johnjthomas.net/templates/bulletproof/img/s9y_banner_small.png</url>
        <title>RSS: John's Blog - Code Complete - A Technical Journal, and other writings</title>
        <link>http://johnjthomas.net/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Subversion, Hudson, Maven, Archiva make a nice team.</title>
    <link>http://johnjthomas.net/index.php?/archives/2-Subversion,-Hudson,-Maven,-Archiva-make-a-nice-team..html</link>
            <category>Code Complete</category>
            <category>Techno Babble</category>
    
    <comments>http://johnjthomas.net/index.php?/archives/2-Subversion,-Hudson,-Maven,-Archiva-make-a-nice-team..html#comments</comments>
    <wfw:comment>http://johnjthomas.net/wfwcomment.php?cid=2</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://johnjthomas.net/rss.php?version=2.0&amp;type=comments&amp;cid=2</wfw:commentRss>
    

    <author>nospam@example.com (John J Thomas)</author>
    <content:encoded>
      Not so back in the past, our software development environment utilized jFrog Artifactory for artifact management, Apache Continuum continuous integration system to build our code, and a preponderance of batch files slung all over the place executing various Ant builds. To top that off there was also c# code that was being built at developers workstations and submitted into subversion source code repositories. The office mantra was &quot;I don&#039;t understand, it worked on my workstation!&quot;. It was, in short, ugly and difficult to follow at best. We had scripts that mixed any given part process; products were built, gathered, downloaded, or packaged at just about any stage, and in any order. There was no separation of the various states of the build, and therefore complete and utter locked co-dependency on the current technologies being used in the process. An update in one place meant visiting many batch files, hoping not to miss one.  &lt;br /&gt;
 &lt;br /&gt;
  So how did we get here? Did we hire incompetence? Did we have issues making decisions? No; not at all. This is more of a symptom of sprawling software development. You start out with your software specification; this is in essence like the foundation of a house. Processes are set in place and development begins. Eventually the house is built, but development is still on-going as the product&#039;s potential is realized. And so the house grows to the point of exceeding the limits of the foundations. But not to worry; foundations can be changed, and expanded upon.&lt;br /&gt;
&lt;br /&gt;
 Enter Maven2 Project Management system, Hudson Continuous Integration Build System, Archiva Build Artifact management. The process was completely rebuilt from the ground up. Where we once had many interweaving batch files performing most of the work, we now had complete separation of processes. Maven allowed us to define project dependencies, codependences, relational hierarchies, and various build goals. Maven is everything Ant ever hoped to be, and more.&lt;br /&gt;
&lt;br /&gt;
 Now our programmers were checking in their code. Hudson would monitor our source code repositories every 10 minutes. If source code was checked in to a given project, be it c#, c++, or Java, then Hudson would build the code and perform (findbugs) code analysis, task analysis, junit tests and provide statistics lines of code, workspace size consumption and project size.  If Hudson detected any cross-project dependencies, it would then kick off their builds too. Hudson would then check in the resulting compiled binaries or assembled sources into Archiva artifact management system. &lt;br /&gt;
&lt;br /&gt;
 Next we have one batch file that simply simply gathers all the relevant binaries (or artifacts), assembling them in a working directory exactly as they would packaged into an installer. This process has no responsibility for building anything, and only cares about the most recent, successfully built artifacts published to Archiva. It doesn&#039;t care how the files are packed or what technology is used in the distribution process. Nor does it care how the binaries came to be.&lt;br /&gt;
&lt;br /&gt;
  Lastly the files would be packaged by our installer platform. This last step doesn&#039;t care about any previous steps. All it knows is that files at location X need to be packaged into an installer. The installer could be Install Shield, Jexpress, Wise, VSS Packaged and Deployment wizzard... whatever the technology, the basic workflow is the same. The nice part is that Hudson also allowed us to perform the last two steps as Jobs so end to end we were totally automated and monitored. &lt;br /&gt;
&lt;br /&gt;
  What is even better is that we have one process that simply builds our code base and assembles it.  We have a completely separate process that gathers all the necessary binaries for the installer. Lastly there is a completely separate process that actually packages all the binaries, and file dependencies. We can upgrade technologies in any part of the process with little to no effect in the other areas allowing us to be more agile and to be able to jump to newer better technologies as they become available at low risk to our product&#039;s stability and quality.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Products worth looking into:&lt;/h3&gt;&lt;br /&gt;
Hudson Extensible Continuous Integration System&lt;br /&gt;
&lt;a href=&quot;http://hudson-ci.org/&quot; title=&quot;http://hudson-ci.org/&quot;&gt;http://hudson-ci.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Apache Archiva Artifact Management&lt;br /&gt;
&lt;a href=&quot;http://archiva.apache.org/&quot; title=&quot;http://archiva.apache.org/&quot;&gt;http://archiva.apache.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Apache Maven2&lt;br /&gt;
&lt;a href=&quot;http://maven.apache.org/&quot; title=&quot;http://maven.apache.org/&quot;&gt;http://maven.apache.org/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Subversion Source Code Repository&lt;br /&gt;
&lt;a href=&quot;http://subversion.tigris.org/&quot; title=&quot;http://subversion.tigris.org/&quot;&gt;http://subversion.tigris.org/&lt;/a&gt; 
    </content:encoded>

    <pubDate>Sat, 24 Oct 2009 07:33:46 -0700</pubDate>
    <guid isPermaLink="false">http://johnjthomas.net/index.php?/archives/2-guid.html</guid>
    
</item>

</channel>
</rss>