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

<channel>
	<title>Chris Read &#187; Build Pipelines</title>
	<atom:link href="http://blog.chris-read.net/tag/build-pipelines/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chris-read.net</link>
	<description>He's just this guy, you know...</description>
	<lastBuildDate>Fri, 23 Apr 2010 19:26:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.chris-read.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/e5f05fcdc8a7a74e94f7e2fbe1d71fbe?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Chris Read &#187; Build Pipelines</title>
		<link>http://blog.chris-read.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.chris-read.net/osd.xml" title="Chris Read" />
	<atom:link rel='hub' href='http://blog.chris-read.net/?pushpress=hub'/>
		<item>
		<title>Introducing ESCAPE</title>
		<link>http://blog.chris-read.net/2009/02/13/introducing-escape/</link>
		<comments>http://blog.chris-read.net/2009/02/13/introducing-escape/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 12:31:12 +0000</pubDate>
		<dc:creator>Chris Read</dc:creator>
				<category><![CDATA[Build]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Build Pipelines]]></category>
		<category><![CDATA[Config Management]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Continuous Deployment]]></category>
		<category><![CDATA[Testing]]></category>

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