<?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>[Dot] Code Dump &#187; Ant</title>
	<atom:link href="http://www.dotcodedump.com/category/ant/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dotcodedump.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Wed, 06 Jan 2010 12:27:53 +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>Web Deployment Primer</title>
		<link>http://www.dotcodedump.com/2009/08/web-deployment-primer/</link>
		<comments>http://www.dotcodedump.com/2009/08/web-deployment-primer/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 01:55:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ant]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[MAKE]]></category>
		<category><![CDATA[Phing]]></category>
		<category><![CDATA[Rake]]></category>
		<category><![CDATA[WGet]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[nant]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://blog.lintnernet.com/?p=64</guid>
		<description><![CDATA[A good deployment strategy is central to the care and feeding of any web application. There are a variety of different types of deployment strategies that are available, and many applications that can be used to automate web applications deployments.
This primer is broken up into major sections below.
Moving Files
If you are like me your web [...]]]></description>
			<content:encoded><![CDATA[<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oJ89RnXa3zM/Spc5lmmkWtI/AAAAAAAAAXA/fTMmUvY_7hQ/s1600-h/Camels+in+car.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 249px;" src="http://4.bp.blogspot.com/_oJ89RnXa3zM/Spc5lmmkWtI/AAAAAAAAAXA/fTMmUvY_7hQ/s320/Camels+in+car.jpg" alt="" id="BLOGGER_PHOTO_ID_5374827998470232786" border="0" /></a>A good deployment strategy is central to the care and feeding of any web application. There are a variety of different types of deployment strategies that are available, and many applications that can be used to automate web applications deployments.</p>
<p>This primer is broken up into major sections below.</p>
<p><span style="font-weight: bold;font-size:130%;" >Moving Files</span></p>
<p>If you are like me your web server isn&#8217;t the same machine as your development PC at least I hope not! You will need a way to get files to your web servers.<span style="font-weight: bold;"></p>
<p>Push: </span>Push deployments are when files are transferred from the client to the server. An example of this would FTP, or many other file transfer protocol.  This involves opening up a client, and manually or automatically transferring the files from your PC to another computer. This could also involve transferring them using a network file system. FTP clients are included with most major operating systems.</p>
<p><span style="font-weight: bold;">Pull:</span> Triggering the server to download files from another location. An example of this would be using a third party program to download the files from web or ftp directory. WGet, SVN, or another similar program could be used.</p>
<p><a style="font-weight: bold;" href="http://www.gnu.org/software/wget/">WGet</a><span style="font-weight: bold;">:</span> Gnu WGet is free software for retrieving files over HTTP</p>
<p><a style="font-weight: bold;" href="http://filezilla-project.org/">FileZilla</a><span style="font-weight: bold;">:</span> Open source FTP client and server.</p>
<p><span style="font-weight: bold;font-size:130%;" >Source (Revision) Control</span></p>
<p>Source control is critical for being able to control releases, and code. Source control allows you to version your applications, and download a particular version from your source control repository. There are many flavors of source control. Personally I prefer Subversion (SVN). <a href="http://en.wikipedia.org/wiki/Revision_control">For information on source control.</a></p>
<p><a style="font-weight: bold;" href="http://subversion.tigris.org/">SVN</a><span style="font-weight: bold;">:</span> Open source, source control client and server.</p>
<p><a style="font-weight: bold;" href="http://www.nongnu.org/cvs/">CVS:</a> Open Source, been around since the 80&#8217;s, Concurrent Versioning System</p>
<p><a style="font-weight: bold;" href="http://mercurial.selenic.com/wiki/">Mercurial:</a> Open Source, Distributed Version Control in Python.</p>
<p><a style="font-weight: bold;" href="http://git-scm.com/">GIT:</a> Open Source, Distributed Version Control<br /><a href="http://bazaar-vcs.org/"><br /><span style="font-weight: bold;">Bazaar:</span></a> Open Source, Distributed Version Control<br /><a href="http://en.wikipedia.org/wiki/Microsoft_Visual_SourceSafe"><br /><span style="font-weight: bold;">Visual Source Safe:</span></a> Microsoft&#8217;s Legacy Version Control<br /><a href="http://en.wikipedia.org/wiki/Team_Foundation_Server"><br /><span style="font-weight: bold;">Team Foundation Server:</span></a> Microsoft&#8217;s Prefered Version Control, as well as project tracking</p>
<p><span style="font-weight: bold;font-size:130%;" >Automation</span></p>
<p>When I first started building websites. All my deployments were done manually over FTP, and it sucked! Then I started using a better FTP client, and guess what it still sucked! I dreaded deploying, it was error prone, and I looked like an idiot because I forgot a file here or there. It all changed when I started automating my deployments, and I haven&#8217;t looked back since.</p>
<p>Depending on what language, or platform you are developing on or for. It is very likely there is an automation application for you system. There is a large class of open source build automation applications based in some way off ANT for Java, which is java version of MAKE.</p>
<p>ANT and it&#8217;s derivatives are build scripts which are programmed using XML. Using the ANT XML files you can control file copying, running builds, unit tests, and a number of other deployment and build related tasks. Most of these applications support building custom tasks in their native language, so if it doesn&#8217;t support what you need it is very easy to build on top of these platforms.<br /><a href="http://www.gnu.org/software/make/"><br /></a><span style="font-weight: bold;"><a href="http://www.gnu.org/software/make/">Make</a>:</span> GNU Build Tool, best suited for compiling applications, custom file configuration.</p>
<p><a href="http://ant.apache.org/"><span style="font-weight: bold;">Ant:</span></a> Java Build Tool, best suited for building and deploying Java applications.<br /><a href="http://nant.sourceforge.net/"><br /><span style="font-weight: bold;">NAnt</span>:</a> .NET port of Ant, best suited for building and deploying .NET applications.</p>
<p><strong><a href="http://phing.info/trac/">Phing</a>: </strong>PHing <strong style="font-weight: normal;">I</strong>s <strong style="font-weight: normal;">N</strong>ot <strong style="font-weight: normal;">G</strong>NU make, best suited for deploying PHP applications.</p>
<p><a href="http://maven.apache.org/"><span style="font-weight: bold;">Maven:</span></a> Similar to Ant, but different application, it is network ready, and uses a system know as the Project Object Model.</p>
<p><a href="http://rake.rubyforge.org/"><span style="font-weight: bold;">Rake</span>:</a> Similar to Make for Ruby, and the config files use a Ruby syntax.</p>
<p><span style="font-size:130%;"><br /><span style="font-weight: bold;">Other Techniques and Tools</span></span></p>
<p><span style="font-weight: bold;">Divide and Conqueror </span></p>
<p>Divide applications deployments up into different sections, so it is very easy to pin point major errors. One example of this is dividing a compiled web applications into binary, and non binary changes, and then deploy one after the other.</p>
<p><span style="font-weight: bold;">Differential </span></p>
<p>Create a deployment of only the files that have changed since the last release. An example would be using source control to download files that have changed, and only deploying those. The advantages are it will reduce time during deployment. It may also have the issue of missing files, or other items.</p>
<p><span style="font-weight: bold;font-size:130%;" >Putting it all together</span></p>
<p>These are just some of the building blocks for deployment strategies. Building a consistent deployment structure will depend on the number of production, and QA environments that host an application. Sometimes you may not even have access to the production servers. These techniques, and tools are very flexible to support even the most rigorous of deployment structures.</p>
<p>The deployment process should never be a source of stress, and deployment processes should never be the source of errors. Using a consistent, and stable deployment process will reduce both stress and errors.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.dotcodedump.com/2009/08/web-deployment-primer/&amp;title=Web+Deployment+Primer" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.dotcodedump.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.dotcodedump.com/2009/08/web-deployment-primer/&amp;title=Web+Deployment+Primer" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.dotcodedump.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.dotcodedump.com/2009/08/web-deployment-primer/&amp;title=Web+Deployment+Primer" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.dotcodedump.com/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Web+Deployment+Primer&amp;url=http://www.dotcodedump.com/2009/08/web-deployment-primer/&amp;title=Web+Deployment+Primer" rel="nofollow" title="Add to&nbsp;DZone"><img class="social_img" src="http://www.dotcodedump.com/wp-content/plugins/social-bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.dotcodedump.com/2009/08/web-deployment-primer/" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.dotcodedump.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.dotcodedump.com/2009/08/web-deployment-primer/&amp;title=Web+Deployment+Primer" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.dotcodedump.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.dotcodedump.com/2009/08/web-deployment-primer/&amp;title=Web+Deployment+Primer" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.dotcodedump.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.dotcodedump.com/2009/08/web-deployment-primer/&amp;title=Web+Deployment+Primer" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.dotcodedump.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.dotcodedump.com/2009/08/web-deployment-primer/" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.dotcodedump.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Web+Deployment+Primer+@+http://www.dotcodedump.com/2009/08/web-deployment-primer/" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.dotcodedump.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://www.dotcodedump.com/2009/08/web-deployment-primer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
