<?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>Xebia Blog &#187; Virtualization</title>
	<atom:link href="http://blog.xebia.com/category/virtualization/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.com</link>
	<description>Software development done right!</description>
	<lastBuildDate>Wed, 01 Feb 2012 00:30:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>On cloud 3&#215;3</title>
		<link>http://blog.xebia.com/2011/12/29/on-cloud-3x3/</link>
		<comments>http://blog.xebia.com/2011/12/29/on-cloud-3x3/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 13:50:06 +0000</pubDate>
		<dc:creator>Adé Mochtar</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Virtualization]]></category>

	<!-- AutoMeta Start -->
	<category>paas</category>
	<category>cloudfoundry</category>
	<category>dropbox</category>
	<category>openstack</category>
	<category>iaas</category>
	<category>heroku</category>
	<category>jclouds</category>
	<category>openshift</category>
	<category>paas</category>
	<category>cloudfoundry</category>
	<category>dropbox</category>
	<category>openstack</category>
	<category>iaas</category>
	<category>heroku</category>
	<category>jclouds</category>
	<category>openshift</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8339</guid>
		<description><![CDATA[2011 has been an interesting year for cloud computing. Traditionally, cloud computing can be divided into three categories: Software-as-a-Service (SaaS) Platform-as-a-Service (PaaS) Infrastructure-as-a-Service (IaaS) While SaaS has been around for some time (Salesforce.com started in 1999!), we are seeing an increase in adoption of IaaS and some heavy development in the PaaS world. Now that [...]]]></description>
			<content:encoded><![CDATA[<p>2011 has been an interesting year for cloud computing. Traditionally, cloud computing can be divided into three categories:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Software_as_a_service" target="_blank">Software-as-a-Service</a> (SaaS)</li>
<li><a href="http://en.wikipedia.org/wiki/Platform_as_a_service" target="_blank">Platform-as-a-Service</a> (PaaS)</li>
<li><a href="http://en.wikipedia.org/wiki/Infrastructure_as_a_service" target="_blank">Infrastructure-as-a-Service</a> (IaaS)</li>
</ul>
<p>While SaaS has been around for some time (Salesforce.com started in 1999!), we are seeing an increase in adoption of IaaS and some heavy development in the PaaS world.</p>
<p>Now that 2011 is coming to an end, this is also the time for lists. So here are my 3 top 3’s of cloud computing.</p>
<p><span id="more-8339"></span><strong></strong></p>
<p><strong>Software-as-a-Service</strong></p>
<p><img class="size-medium wp-image-8344 alignright" style="border-style: initial; border-color: initial;" title="GitHub Social Coding" src="http://blog.xebia.com/wp-content/uploads/2011/12/github-social-300x145.png" alt="" width="300" height="145" align="right" />3. GitHub</p>
<p>Distributed version control systems are gaining track rapidly, with Git leading the way. <a title="GitHub" href="http://github.com/" target="_blank">GitHub</a> provides Git as a service, and offers unlimited repositories for open source software. It provides an excellent interface that stimulates social coding. This means it is a great incentive for open source development.</p>
<p>2. Dropbox</p>
<p>Well, who doesn’t use <a title="Dropbox" href="http://www.dropbox.com/" target="_blank">Dropbox</a>? Dropbox offers a filesharing service that is easy to use. There are two reasons for the success of Dropbox; it is easy to start with 2GB of free space, and it provides clients for almost all platforms.</p>
<p>1. Google Apps</p>
<p>Google is trying hard to get us all to work in the cloud, and their <a href="http://www.google.com/apps" target="_blank">Google Apps</a> service is their way to do so. They even have a free service for private use. Google Apps provides a full application suite including e-mail, calendar and docs. GMail is massively adopted and has been a game-changer since introduction in 2004.</p>
<p><strong>Infrastructure-as-a-Service</strong></p>
<p><strong></strong>3. OpenStack</p>
<p>When talking about IaaS, people immediately think about the Amazon AWS platform. But what if you don’t like their terms-of-service, or simply want to create something similar in your own data center? Enter <a href="http://www.openstack.org" target="_blank">OpenStack</a>. If there is one DIY IaaS framework that has momentum, it is OpenStack. It is backed by no less than <a href="http://openstack.org/community/companies/" target="_blank">144 companies</a>, and best of all, it’s open source.</p>
<p>2. jclouds</p>
<p>If all the IaaS frameworks and providers and all their different APIs are giving you an headache, <a href="http://www.jclouds.org/" target="_blank">jclouds</a> is the framework for you. The jclouds API provides an abstraction of the different cloud-specific implementations. Currently over 30 providers are supported, including all the usual suspects (Amazon AWS, OpenStack, Azure, etc).</p>
<p><img class="alignright size-medium wp-image-8345" style="border-style: initial; border-color: initial;" title="Amazon AWS Monkey" src="http://blog.xebia.com/wp-content/uploads/2011/12/AWS-monkey-300x225.jpg" alt="" width="200" height="150" align="right" />1. Amazon AWS</p>
<p>The undisputed number 1 of IaaS is of course <a href="http://aws.amazon.com/" target="_blank">Amazon AWS</a>. Ever since the introduction in 2002, Amazon AWS is the reference implementation for IaaS. It sets the standard and the rest of the IaaS providers are merely trying to catch up. Amazon also doesn’t sit still, it constantly adds new services to its platform (and is slowly growing into a PaaS). It is available around the globe, with data centers in almost every continent.</p>
<p><strong>Platform-as-a-Service</strong></p>
<p><strong></strong>3. Heroku</p>
<p><a href="http://www.heroku.com/" target="_blank">Heroku</a> is a fully hosted PaaS platform. It supports lots of languages, and it completely hides the infrastructure (servers, instances, etc) from your applications. It has a partnership with Facebook, creating the Heroku Facebook App Package, which enables quick development of Facebook apps. I think it is one of the best examples of a public PaaS.</p>
<p><img class="alignright size-medium wp-image-8347" title="cloud-foundry" src="http://blog.xebia.com/wp-content/uploads/2011/12/cloud-foundry-300x211.jpg" alt="" width="300" height="211" align="right" />2. CloudFoundry</p>
<p>CloudFoundry is being developed by VMware. After acquiring SpringSource back in 2009, this is the next logical step for them. CloudFoundy is positioned as the Open PaaS. While most PaaS solutions limit the choice of frameworks and infrastructure services, CloudFoundry tries to be open and extensible. And best of all, you can use the <a href="https://my.cloudfoundry.com/micro" target="_blank">micro edition</a> for development, the <a href="http://cloudfoundry.org/" target="_blank">private (open source) edition</a> in your own data center and the <a href="http://www.cloudfoundry.com/" target="_blank">hosted edition</a> as a public PaaS (or even a hybrid setup).</p>
<p>1. ???</p>
<p>We are seeing <a title="Ever growing list of PaaS" href="http://upon2020.com/2011/04/the-ever-growing-list-of-paas-companies-and-paas-projects/" target="_blank">lots of development</a> in this area with all different flavors of PaaS platforms and services. We have even built custom PaaS platforms for our customers based on the traditional application servers (JBoss, WebLogic, etc). But there is still lots of work to be done, before full stack solutions will be readily available. So, I think there is no number 1… yet.</p>
<p><strong>And beyond&#8230;</strong></p>
<p>2012 looks like it will be a good year for the cloud. I am very curious to see what the PaaS providers are going to bring to the table. Projects like <a href="https://openshift.redhat.com" target="_blank">OpenShift</a>, <a href="http://www.cloudfoundry.org" target="_blank">CloudFoundry</a> and <a href="http://wso2.com/cloud/stratos/" target="_blank">Stratos</a> are looking very promising, and I can’t wait to dive into them.</p>
<p>What are your top cloud services? Or which ones do you think that will become the next best thing? Feel free to add them to the comments below.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/12/29/on-cloud-3x3/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F12%2F29%2Fon-cloud-3x3%2F&amp;title=On%20cloud%203%26%23215%3B3" id="wpa2a_2"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/12/29/on-cloud-3x3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Continuous Delivery for Enterprise Java Applications</title>
		<link>http://blog.xebia.com/2011/12/14/continuous-delivery-for-enterprise-java-applications/</link>
		<comments>http://blog.xebia.com/2011/12/14/continuous-delivery-for-enterprise-java-applications/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 12:00:41 +0000</pubDate>
		<dc:creator>Mark van Holsteijn</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Continuous Delivery]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Virtualization]]></category>

	<!-- AutoMeta Start -->
	<category>puppet</category>
	<category>layer7</category>
	<category>balancer</category>
	<category>puppet</category>
	<category>layer7</category>
	<category>balancer</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8202</guid>
		<description><![CDATA[How do you setup a environment that support the continuous deliver of enterprise Java applications? How do you manage the large number of machines that are involved? How do you enable self-service, continuous delivery of applications onto the platform? In this blog post we will give a description of an open source Java Application Platform [...]]]></description>
			<content:encoded><![CDATA[<p>How do you setup a environment that support the continuous deliver of enterprise Java applications? How do you manage the large number of machines that are involved? How do you enable self-service, continuous delivery of applications onto the platform?</p>
<p>In this blog post we will give a description of an open source Java Application Platform as a Service that we created for our customer, using VMware, Redhat Enterprise Linux, Apache WebServer, JBoss Enterprise Application Platform, JBoss Operations Network, Puppet, Deployit,  F5 Load Balancer and  a Layer7 SecureSpan gateway.</p>
<p><span id="more-8202"></span></p>
<h1>Data Center Quality Platform</h1>
<p>The customer wanted a data center quality Java Application Platform with the following features:</p>
<ul>
<li>Standard configuration</li>
<li>Standardized provisioning</li>
<li>Standardized deployment</li>
<li>Centralized monitoring</li>
<li>Centralized access control</li>
<li>Virtual environment</li>
<li>Proving technology</li>
</ul>
<h2>Current situation</h2>
<p>As the current Java application platform was based on HP-UX on Itanium, the customer was facing high cost for hardware, software licenses and fading support from software vendors.  As all applications ran on a HP Superdome, it was very difficult to add resources to individual applications. In addition, development teams spend too much time taking their software through the development, test and acceptance environments, resulting in slow delivery of software into production. Finally, it was difficult to provide 24&#215;7 availability because all applications are running on a single machine.</p>
<h1><strong><span style="font-family: helvetica;">Java Application Platform </span></strong></h1>
<p>The following figure illustrate the solution architecture of the java application platform.</p>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/jap-solution-overview.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="jap solution overview" src="http://blog.xebia.com/wp-content/uploads/2011/12/jap-solution-overview_thumb.jpg" alt="jap solution overview" width="668" height="375" border="0" /></a></p>
<p>In the following paragraphs we will describe the purpose of the most important components.</p>
<h2>Dual Data Center – HP</h2>
<p>Not shown in the figure, is the hardware setup of the platform. It consists of <a href="http://h18004.www1.hp.com/products/blades/bladesystem/index.html" target="_blank">HP</a> blades setup in two data centers on two different locations. This provides the basic infrastructure for 24&#215;7 availability and fault tolerance.</p>
<h2>VMware ESX</h2>
<p><a href="http://www.vmware.com" target="_blank">VMware</a> ESX is deployed on top of the hardware in the dual data center. This provides us with the ability to create virtual machines and provide high availability in case of single server of single site failures. It also allows us the quickly scale up virtual machines and increase the resources assigned to individual virtual machines.</p>
<p>For all machines in the platform we use a single VMware template image. This image is installed with RedHat Enterprise Linux and a puppet client.</p>
<h2>Puppet</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/vm-template1.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="vm-template" src="http://blog.xebia.com/wp-content/uploads/2011/12/vm-template_thumb1.jpg" alt="vm-template" width="308" height="142" border="0" /></a></p>
<p><a href="http://www.puppetlabs.com" target="_blank">Puppet</a> fully automates system management. It is used for the installation of software packages, conformity tests and day to day system administration tasks.  For every type of node, we have a puppet plan. When the machines boots, the puppet agent provisions the machine with all the necessary software and configuration according to the plan for that machine.</p>
<p>The use of Puppet completely automates and standardizes the configuration, ensures 100% reproducibility of the configuration and is fast. Provisioning of a new machine from the template to full operational mode is done in a matter of minutes.</p>
<h2>JBoss EAP</h2>
<p><a href="http://www.jboss.com/products/platforms/application/" target="_blank">JBoss Enterprise Application Platform</a> is the Enterprise Java applications server for all java applications.  The installation and configuration is done by Puppet and uses the official RedHat RPMs.  Puppet configures JBoss to ensure that :</p>
<ul>
<li>JBoss management applications authenticate users against Active Directory, providing a single point of authorization for operations.</li>
<li>A JBoss Oracle database schema is automatically provisioned for that specific instance of JBoss, providing persistence for the JBoss server system state.</li>
<li>All Business Applications can authenticate users using SAML against the Layer7 Identity provider, providing a single point of authentication and authorization for their customers.</li>
<li>The JBoss instance is added to the pool in the F5 Load balancer</li>
<li>The application server is added to the Deployit infrastructure inventory, providing the tenants of the platform with the ability to deploy applications to the server.</li>
</ul>
<p>JBoss application servers are always deployed in multiples of two, where each server of a pair is assigned to a physically different data center location by VMware.</p>
<p>The use of puppet provides us with a fast and reproducible way of provisioning JBoss application servers, allowing for a fast and reliable scale out mechanism for the applications.</p>
<h2>JBoss Operations Network</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.xebia.com/wp-content/uploads/2011/12/image_thumb.png" alt="image" border="0" /></a></p>
<p><a href="http://www.redhat.com/jboss_on/" target="_blank">JBoss Operations Network (</a>JON) is used for monitoring all the resources in the platform.   By default, Puppet installs a JON agent on every machine. This agent scans the inventory of the machine and reports it to the JON server.</p>
<p>JON has a very good support for high availability and fail over. By simply adding a JON server machine, agents will automatically distribute themselves across the servers and failover if necessary. Each JON server also runs a JON agent, making sure that unavailability of a JON server is also covered.</p>
<p>In JON we created a number of alert templates for different resource types (os, apache, jboss, jon, puppet, etc.)  that will monitor and report critical conditions on the system.  All error messages from the JBoss servers logs are reported as incidents.</p>
<p>All alerts and clearing conditions from JBoss Operations network are reported via SNMP to TNG Unicenter.</p>
<p>Through the  use of JBoss Operations Network all machines, servers and resources in the platform are automatically added to the centralize monitoring system.</p>
<h2>Deployit</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/image1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.xebia.com/wp-content/uploads/2011/12/image_thumb1.png" alt="image" width="244" height="148" border="0" /></a></p>
<p><a title="Deployit" href="http://www.xebialabs.com" target="_blank">Deployit</a> is used for the automated deployment of applications onto the platform. It automatically deploys all the application components in a stack to the appropriate containers.  Deployit :</p>
<ul>
<li>deploys static content and proxy configuration to the apache webservers,</li>
<li>deploys enterprise java application components to all individual JBoss servers in the farm,</li>
<li>executes SQL scripts to the database,</li>
<li>configures the F5 loadbalancers to add or remove servers or applications to the pool,</li>
<li>applies environment specific changes to the application configuration.</li>
</ul>
<p>The deployment plan for a specific application is prepared in close cooperation between the application developer and platform management staff. When the deployment plan is finished, developers can deploy new versions of the application themselves, directly from a build tool or manually.This ensures solving any installation or configuration problem isn&#8217;t postponed until the application is installed for production use, but rather is solved at the early stage of any development.</p>
<p>The same deployment plan is used for all environments. Authorization can be configured per enviroment and per application. LDAP is used to authorize software developers to deploy and configure an application for development and testing purposes, while integration specialist can deploy the application in production.</p>
<p>The use of Deployit provides the platform with a fully automated and standardized deployment mechanism, improving the speed of deployment of applications through the development, test and acceptance environments while reducing the number of staff involved and lowering the number of configuration errors.</p>
<h2>F5 Load Balancer</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/image2.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.xebia.com/wp-content/uploads/2011/12/image_thumb2.png" alt="image" width="244" height="229" border="0" /></a></p>
<p>The<a title="F5 Load balancers" href="http://www.f5.com/products/big-ip/" target="_blank"> F5 Load balancers</a> is used to support scalability and fail over for the JBoss Application Server farm.</p>
<p>The pools are configured to use a sticky session protocol based upon the JSESSIONID session cookie. If the cookie is not present, round-robin load balancing of the HTTP requests is performed.</p>
<p>Puppet adds the JBoss servers to the  pool in the F5 Load Balancer.</p>
<p>When a server is scheduled for a restart, the server is taken out of the pool. This ensures that this server does not get any new request, but will still be servicing existing sessions. When the session count in JBoss drops to zero, the server is restarted and restored to the pool.</p>
<p>The use of the F5 Load Balancer provides us with the ability to increase and decrease the number of servers in the farm, provide load balancing, fail over and graceful decommissioning of servers in the farm.</p>
<h2>Layer7 XML Gateway / Identity Provider</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/image3.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.xebia.com/wp-content/uploads/2011/12/image_thumb3.png" alt="image" width="244" height="149" border="0" /></a></p>
<p>The<a href="http://www.layer7tech.com/products/soa-gateway" target="_blank"> Layer7 SecureSpan Gateway</a> is used as centralized security policy enforcement point and SAML identity provider.</p>
<p>Layer7 supports multiple authentication methods, Kerberos, digital certificates, username+password and is able to use multiple identity stores.</p>
<p>Puppet configures all JBoss application servers with SAML support and configures Layer7 as the identity provider: JBoss receives authentication (identity) and authorization (roles) information as a SAML-token. The information contained in the token is translated to a standard JEE-principal user (using a tiny layer of custom code), so all JEE applications can access the authentication and authorization information in a standard way.  Whether the JEE application is a web application or provides webservices, from a security there&#8217;s no distinction. All application designers have to do is declare the application security roles conform the JEE standard.</p>
<p>The use of Layer7 standardizes the authentication and authorization for all business applications and centralizes access control.</p>
<h1>Conclusion</h1>
<p>The customer wanted a modern data center quality Java Application Platform to ensure that java applications could be deployed with lower cost and with high availability and easy scalability.</p>
<p>VMware, the dual data center, Layer7, the F5 Load balancer and JBoss provide the infrastructure for a  high availability and scalability for any java application. The combination of VMware, Puppet and Deployit are the fabric to enable continuous delivery of enterprise java applications.</p>
<p>Through virtualization and automated provisioning and deployment it has become possible to add a completely new, correctly configured machine to a cluster in a matter of minutes, completely secure and under full monitoring.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/12/14/continuous-delivery-for-enterprise-java-applications/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F12%2F14%2Fcontinuous-delivery-for-enterprise-java-applications%2F&amp;title=Continuous%20Delivery%20for%20Enterprise%20Java%20Applications" id="wpa2a_4"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/12/14/continuous-delivery-for-enterprise-java-applications/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Taking Application Release Automation to the Next Level</title>
		<link>http://blog.xebia.com/2011/11/29/taking-application-release-automation-to-the-next-level/</link>
		<comments>http://blog.xebia.com/2011/11/29/taking-application-release-automation-to-the-next-level/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 18:54:29 +0000</pubDate>
		<dc:creator>Andrew Phillips</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Xebia Labs]]></category>
		<category><![CDATA[application release automation]]></category>
		<category><![CDATA[continuous deployment]]></category>
		<category><![CDATA[deployment automation]]></category>

	<!-- AutoMeta Start -->
	<category>standardisation</category>
	<category>outs</category>
	<category>intelligence</category>
	<category>adopters</category>
	<category>generation</category>
	<category>standardisation</category>
	<category>outs</category>
	<category>intelligence</category>
	<category>adopters</category>
	<category>generation</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8147</guid>
		<description><![CDATA[Whether the driver is Agile, Cloud or DevOps1, or a &#8220;plain old&#8221; efficiency drive or process improvement initiative, forward-thinking organisations are currently looking for ways to improve their application release processes through automation. In an area where manual activities are still all too common, it&#8217;s unsurprising that the initial focus has been on automating the [...]]]></description>
			<content:encoded><![CDATA[<p>Whether the driver is Agile, Cloud or DevOps<sup>1</sup>, or a &#8220;plain old&#8221; efficiency drive or process improvement initiative, forward-thinking organisations are currently looking for ways to improve their application release processes through automation. In an area where manual activities are still all too common, it&#8217;s unsurprising that the initial focus has been on automating the deployment <em>execution</em> &#8211; moving all the bits to the right places.</p>
<p>What early adopters have learnt is that, at the enterprise scale, automating release execution quickly introduces a new bottleneck in today&#8217;s dynamic IT environments: continuous management of the deployment plan definition. A new generation of application release automation (ARA) tooling avoids this pitfall by leveraging intelligence to automate deployment <em>planning</em> as well as execution.<br />
<span id="more-8147"></span></p>
<h3>The State of ARA</h3>
<div style="padding: 5px; float: right;">
<img src="http://blog.xebialabs.com/wp-content/uploads/2011/11/ara_next_level-11.jpg" alt="" title="ara_next_level-1" width="200" height="159" class="alignnone size-full wp-image-6003" />
</div>
<p>Given how strongly our IT industry is dedicated to the automation of processes, it is nothing short of amazing how much of the deployment of <em>our own solutions</em> depends on manual actions coordinated more or less effectively between large groups of people.<br />
Indeed, a recent analyst report noted that the majority of large enterprises were still relying on manual application release processes or on in-house scripting understood by only a small number of specialists, operated as a black box that &#8211; hopefully &#8211; will do its job and will most likely necessitate a painful troubleshooting session if it doesn&#8217;t.</p>
<p>With key IT trends such as Agile, Cloud and DevOps dramatically ramping up the frequency of application releases in order to increase responsiveness to business needs and provide more and better services to customers, it&#8217;s clear that this situation cannot continue. </p>
<p>Thinking of today&#8217;s common release processes, it is also hardly surprising that the initial drive has been to automate the actual <a href="http://blog.xebialabs.com/2010/12/20/deployment-automation-vs-server-provisioning/" target="_new">rollout of the application</a> itself: copying the files to the target machines, restarting the servers, running the SQL against the DB etc. Using a defined workflow to organise these activities makes lots of sense: fewer failures, no more missing steps or steps executed in the wrong order, no more typos, better visualization etc.</p>
<h3>Lessons from the First Generation</h3>
<div style="padding: 5px; float: right;">
<img src="http://blog.xebialabs.com/wp-content/uploads/2011/11/ara_next_level-2.png" alt="" title="ara_next_level-2" width="200" height="143" class="alignnone size-full wp-image-6001" />
</div>
<p>Ironically, using one of these first generation ARA tools at an enterprise scale quickly made it obvious to early adopters how much effort is required to maintain the substantial number of workflow definitions that quickly accumulate to support full deployments, partial upgrades, rollbacks, environment scale-outs etc. across an enterprise application portfolio.</p>
<p>Of course, this is not a new challenge: ask anyone who has had to update 100 build job definitions in a continuous integration tool to change a compilation parameter, or 100 test plans in an automated testing setup to accommodate a different target browser, just how time-consuming and error-prone this type of maintenance is.</p>
<p>It&#8217;s not as though these modifications are <em>unique per process</em>. They tend to be <u>systematic</u> changes that reflect changes to the overall deployment strategy and/or context. The issue is that these first-generation tools, where all the deployment <em>intelligence</em> is stored in the power user&#8217;s brain, simply do not have enough internal <em>knowledge</em> of the structure of deployment to assist effectively.</p>
<h3>The Next Level of Application Release Automation</h3>
<div style="padding: 5px; float: right;">
<img src="http://blog.xebialabs.com/wp-content/uploads/2011/11/ara_next_level-3.jpg" alt="" title="ara_next_level-3" width="200" height="189" class="alignnone size-full wp-image-6004" />
</div>
<p>A new generation of Application Release Automation includes this intelligence. These advanced tools<sup>2</sup> no longer require hand-holding by your power users every step of the way, and encode knowledge of deployment best practices and strategies to automate the planning <em>and</em> execution of deployments.<sup>3</sup></p>
<p>No pre-provided strategy can be a 100% fit in an enterprise environment, so the strategies must be configurable, of course. Once your power users have fine-tuned them, however, all the individual deployment plans &#8211; initial installations, full and partial upgrades, downgrades, undeployments, scale-outs etc&#8230;easily hundreds across an application portfolio &#8211; are automatically tailored to your scenario.</p>
<p>This becomes even more efficient the fewer deployment strategies are in play, so these tools also motivate and reward increased standardisation of deployment procedures, in itself a valuable business goal. In fact, with a suitable interface and integrations into the development pipeline you essentially have an enterprise <a href="http://en.wikipedia.org/wiki/Cloud_computing#Platform" target="_new">Platform as a Service</a>, potentially on a private or hybrid cloud.</p>
<h3>Conclusions</h3>
<p>With adoption of Application Release Automation rapidly on the increase, a new generation of solutions are appearing that automate deployment planning as well as execution.<br />
Based on the challenges experienced in scaling the first generation of ARA tools to enterprise levels, these next generation solutions are designed to eliminate &#8220;continuous expert hand-holding&#8221;, promote standardisation and allow organisations to create a &#8220;software factory&#8221; that continuously delivers business value.</p>
<div style="background-color: #efeeea; border: 1px solid #AAAAAA; margin: 0.8em; padding: 0.4em; font-size: 85%;"><strong>Footnotes</strong></p>
<ol>
<li>My spelling preference is <u>still</u> for &#8220;Devops&#8221; since the whole point is, after all, that Dev and Ops are <em>no longer</em> regarded as separate, but hey&#8230; <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>like XebiaLabs&#8217; <a href="http://www.xebialabs.com/tour" target="_new">Deployit</a></li>
<li><a href="http://blog.xebialabs.com/2011/05/03/deployment-is-the-new-build-part-1/" target="_new">This advance</a> closely mirrors the development of build frameworks from tools like <a href="https://ant.apache.org/" target="_new">Ant</a> to today&#8217;s industry standards like <a href="https://maven.apache.org/" target="_new">Maven</a> and on to the next generation of <a href="http://www.gradle.org/" target="_new">Gradle</a>, <a href="https://github.com/harrah/xsbt/wiki/" target="_new">SBT</a> and others.</li>
</ol>
</div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/11/29/taking-application-release-automation-to-the-next-level/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F11%2F29%2Ftaking-application-release-automation-to-the-next-level%2F&amp;title=Taking%20Application%20Release%20Automation%20to%20the%20Next%20Level" id="wpa2a_6"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/11/29/taking-application-release-automation-to-the-next-level/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Leveraging the IBM Workload Deployer CLI to automate WebSphere application deployment</title>
		<link>http://blog.xebia.com/2011/08/15/leveraging-the-ibm-workload-deployer-cli-to-automate-websphere-application-deployment/</link>
		<comments>http://blog.xebia.com/2011/08/15/leveraging-the-ibm-workload-deployer-cli-to-automate-websphere-application-deployment/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 07:43:53 +0000</pubDate>
		<dc:creator>Vincent Partington</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Xebia Labs]]></category>

	<!-- AutoMeta Start -->
	<category>workload</category>
	<category>cloudburst</category>
	<category>cloudburst</category>
	<category>workloads</category>
	<category>deployer</category>
	<category>deploys</category>
	<category>appliance</category>
	<category>websphere</category>
	<category>workload</category>
	<category>cloudburst</category>
	<category>cloudburst</category>
	<category>workloads</category>
	<category>deployer</category>
	<category>deploys</category>
	<category>appliance</category>
	<category>websphere</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=7265</guid>
		<description><![CDATA[A few months ago I blogged about the integration between Deployit and IBM WebSphere CloudBurst (since renamed to IBM Workload Deployer). While that article gave an overview of the integration and included some nice screenshots, it did not really go into the details. Now is the time to explore the implementation of this integration.. Workload [...]]]></description>
			<content:encoded><![CDATA[<p><em>A few months ago I <a href="http://blog.xebialabs.com/2011/05/08/deployit-integrated-with-websphere-cloudburst-appliance-for-applications-on-demand/">blogged about the integration between Deployit and IBM WebSphere CloudBurst</a> (since renamed to IBM Workload Deployer). While that article gave an overview of the integration and included some nice screenshots, it did not really go into the details. Now is the time to explore the implementation of this integration.</em>.</p>
<p>
Workload Deployer V3</a> and <a href="http://www.xebialabs.com/features">Deployit</a> from <a href="http://www.xebialabs.com/">XebiaLabs</a> both &#8220;deploy&#8221; things, but they deploy different things.  Deployit deploys application artifacts and resources, such as EAR files and data sources, to middleware systems like IBM WebSphere Application Server (but also HTML to web servers, IBM WebSphere MQ configurations to queue managers, and so on). IBM Workload Deployer, on the other hand, deploys patterns (or topologies) of virtual images to hypervisors &#8212; but not just any kind of virtual images. IBM Workload Deployer is especially geared toward deploying middleware topologies.</p>
<p>
IBM Workload Deployer V3 is an updated and enhanced version of the  WebSphere CloudBurst Appliance, renamed to reflect the expanded scope of workloads it can deploy, which are no longer limited to only WebSphere workloads.  The content for this article (including screen captures) was created using a WebSphere CloudBurst Appliance, but everything noted here is equally applicable to IBM Workload Deployer V3.  However, for the sake of consistency with the images presented, &#8220;WebSphere CloudBurst&#8221; is used throughout this article to refer to both products.</p>
<p>
In other words, IBM Workload Deployer deploys the middleware systems and Deployit deploys applications to those middleware systems &#8212; complementary functionalities that form a perfect fit.</p>
<p>
At XebiaLabs, we have been working on two exciting new integrations for Deployit. We created a Deployit plugin that enables you to deploy EAR files directly to virtual systems created by IBM Workload Deployer V3 or its predecessor, IBM WebSphere CloudBurst Appliance V2. We also created a WebSphere CloudBurst script package to deploy application artifacts and resources on newly created virtual systems.</p>
<p>
This article explores two integrations between WebSphere CloudBurst and Deployit as a way of showing how you can leverage the WebSphere CloudBurst command line interface and script packages to integrate cloud deployment with your application deployment automation solution.</p>
<p>
<a href=http://www.ibm.com/developerworks/websphere/techjournal/1108_inreach/1108_inreach.html?ca=drs-" class="more-link">(more&#8230;)</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/08/15/leveraging-the-ibm-workload-deployer-cli-to-automate-websphere-application-deployment/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F08%2F15%2Fleveraging-the-ibm-workload-deployer-cli-to-automate-websphere-application-deployment%2F&amp;title=Leveraging%20the%20IBM%20Workload%20Deployer%20CLI%20to%20automate%20WebSphere%20application%20deployment" id="wpa2a_8"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/08/15/leveraging-the-ibm-workload-deployer-cli-to-automate-websphere-application-deployment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integration testing CloudBees&#8217; RUN@cloud</title>
		<link>http://blog.xebia.com/2011/08/03/integration-testing-cloudbees-runcloud/</link>
		<comments>http://blog.xebia.com/2011/08/03/integration-testing-cloudbees-runcloud/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 05:30:50 +0000</pubDate>
		<dc:creator>Andrew Phillips</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Google AppEngine]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[jclouds]]></category>

	<!-- AutoMeta Start -->
	<category>tweetstore</category>
	<category>cloudbees</category>
	<category>cloudbees</category>
	<category>jclouds</category>
	<category>idletimer</category>
	<category>staxsdkappserver</category>
	<category>googledevserver</category>
	<category>timer</category>
	<category>tweetstore</category>
	<category>cloudbees</category>
	<category>cloudbees</category>
	<category>jclouds</category>
	<category>idletimer</category>
	<category>staxsdkappserver</category>
	<category>googledevserver</category>
	<category>timer</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=7040</guid>
		<description><![CDATA[As part of the preparations for the recent 1.0.0 release of jclouds, I was tidying up the existing Tweetstore demo application as well as porting it to CloudBees&#8217; Tomcat-based RUN@cloud platform. A key part of the test harness for the original versions of Tweetstore that run on the Google App Engine is the neat GoogleDevServer [...]]]></description>
			<content:encoded><![CDATA[<p>As part of the preparations for the recent <a href="http://anyweight.blogspot.com/2011/06/jclouds-100-is-out.html" target="_new">1.0.0 release</a> of <a href="http://www.jclouds.org/" target="_new">jclouds</a>, I was tidying up the existing <a href="http://anyweight.blogspot.com/2009/10/save-your-tweets-forever-with-jclouds.html" target="_new">Tweetstore</a> demo application as well as <a href="http://tweetstore.jclouds.cloudbees.net" target="_new">porting it</a> to CloudBees&#8217; Tomcat-based <a href="http://www.cloudbees.com/run.cb" target="_new">RUN@cloud</a> platform.</p>
<p>A key part of the test harness for the <a href="https://jclouds-tweetstore.appspot.com/" target="_new">original</a> <a href="https://jclouds-tweetstore-spring.appspot.com/" target="_new">versions</a> of Tweetstore that run on the <a href="https://code.google.com/appengine/docs/whatisgoogleappengine.html" target="_new">Google App Engine</a> is the neat <a href="https://github.com/jclouds/jclouds/blob/master/demos/tweetstore/gae-tweetstore/src/test/java/org/jclouds/demo/tweetstore/integration/GoogleDevServer.java" target="_new">GoogleDevServer</a> class. Basically, it&#8217;s a clever wrapper around the <tt>KickStart</tt> class used under the covers by the <a href="https://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Java" target="_new">GAE SDK tools</a> that allows you to specify the SDK location, address, port and WAR file (or expanded WAR directory) to run.<br />
Better still, it can programmatically be shut down cleanly, making it ideal for integration test runs<sup>1</sup>.</p>
<p>For CloudBees, I was thus looking to put together a similar <a href="https://github.com/jclouds/jclouds/blob/master/demos/tweetstore/runatcloud-tweetstore/src/test/java/org/jclouds/demo/tweetstore/integration/RunAtCloudServer.java" target="_new">RunAtCloudServer</a>. It proved more challenging than expected&#8230;<sup>2</sup><br />
<span id="more-7040"></span></p>
<h3>Just spawn a container already?</h3>
<p>Both the <a href="http://www.kindleit.net/maven_gae_plugin/" target="_new">maven-gae-plugin</a> and the <a href="https://cloudbees.zendesk.com/entries/421064-maven-guide" target="_new">bees-maven-plugin</a> allow you to spawn a local GAE or RUN@cloud server simulation, of course. These can easily be integrated into your Maven build, for instance as part of your <tt>pre-integration-test</tt> setup. So why not just stick with that?</p>
<p>Well, for some scenarios that can be perfectly sufficient. For Tweetstore, having an inline server that cleanly shuts down allows us to:</p>
<ul>
<li>run integration tests alongside unit tests from an IDE without having to remember to start an external process</li>
<li>debug the application running in the server on demand, without having to mess with remote debuggers or figure out a way to <em>sometimes</em> get the Maven plugins to start in debug mode</li>
<li>work some conditional magic with the server arguments</li>
</ul>
<p>If your project&#8217;s requirements are similar, an inline server might be a good option. And luckily, the code&#8217;s already been written!</p>
<h3>Hangin&#8217; around</h3>
<div style="padding: 5px; float: right;"><img src="http://blog.xebia.com/wp-content/uploads/2011/06/zombies.png" alt="" title="zombies" width="266" height="173" class="alignnone size-full wp-image-7044" /></div>
<p>The <a href="https://cloudbees.zendesk.com/entries/414109-cloudbees-sdk" target="_new">RUN@cloud SDK&#8217;s</a> version of <tt>KickStart</tt> is the <tt>StaxSdkAppServer</tt><sup>3</sup>. Figuring out the correct arguments for the <tt>launchServer</tt> factory method wasn&#8217;t too hard, so I hooked up a <tt>StaxSdkAppServer</tt> and kicked off the test. </p>
<p>Started like a charm! Then the test finished and&#8230;just hung on in there. Over in the trusty debugger<sup>4</sup>, I could see not one, but <em>two</em> zombie threads still running. The design was based on a &#8220;shutdown-by-JVM-kill&#8221; scenario, I guess.</p>
<h3>Assassins and other Ninja Tricks</h3>
<p>The first of the two threads is a <a href="http://download.oracle.com/javase/6/docs/api/java/util/Timer.html" target="_new">Timer</a> that something called the <tt>WebAppEngine</tt> uses to do&#8230;well, who knows? In any case, we can get a reference to it with a decent handful of reflection and <a href="http://download.oracle.com/javase/6/docs/api/java/util/Timer.html#cancel()" target="_new">cancel</a> it. Easy enough.</p>
<p>Our remaining zombie is a bit more elusive, unfortunately. It&#8217;s a thread spawned by an instance of the <tt>RequestMonitorValve</tt> class in a manner analogous to</p>
<pre class="brush: java; title: ; notranslate">
new Thread(idleTimer, &quot;requestMonitor&quot;).start();
</pre>
<p>So no reference, and no way of interrupting it. However, the <tt>idleTimer</tt> <a href="http://download.oracle.com/javase/6/docs/api/java/lang/Runnable.html" target="_new">Runnable</a> <em>is</em> referenced <em><u>and</u></em> repeatedly calls a handler as part of its execution. How about injecting a handler that throws an exception to end the thread?</p>
<p>Nice idea, but it turns out the thread really doesn&#8217;t want to die that way:</p>
<pre class="brush: java; title: ; notranslate">
while(true) {
    try {
        // do stuff
        if(callbackClient != null)
            callbackClient.updateStatus(state);
    } catch(Exception e) {
        // increment some error counters
    }

    try {
        Thread.sleep(statusIntervalSecs * 1000);
    } catch(InterruptedException interruptedexception) { }
}
</pre>
<p>So I&#8217;ve had to go one better and throw a <a href="http://download.oracle.com/javase/6/docs/api/java/lang/ThreadDeath.html" target="_new">ThreadDeath</a> <a href="http://download.oracle.com/javase/6/docs/api/java/lang/Error.html" target="_new">error</a> instead. Urgh.</p>
<h3>Now you see it, now you don&#8217;t?</h3>
<p>The remaining gotcha involves injecting the catchily-named <tt>KillerCallback</tt> into the <tt>idleTimer</tt>. Even using reflection, this is a elementary concurrency failure because without a <a href="http://java.sun.com/docs/books/jls/third_edition/html/memory.html#64058" target="_new">synchronized-with relationship</a><sup>5</sup> between injecting the new handler and invocation of the handler by <tt>idleTimer</tt>, there is no guarantee the new handler will actually be visible to the thread we&#8217;re trying to stop.</p>
<p>Such a relationship <em>could</em> be established if the &#8220;assassin&#8221; was injected <em>before</em> the thread that runs <tt>idleTimer</tt> starts. Unless we want to override library classes, that would mean setting it after creating but before starting the <tt>StaxSdkAppServer</tt><sup>6</sup>&#8230;which unfortunately doesn&#8217;t work either because the instances referencing <tt>idleTimer</tt> are only created when the server starts.</p>
<h3>So?</h3>
<p>So, for now the potential concurrency issue is documented and we hope for the best <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  No problems observered so far&#8230;</p>
<div style="background-color: #EFEEEA; border: 1px solid #AAAAAA; margin: 0.8em; padding: 0.4em; font-size: 85%;">
<strong>Footnotes</strong></p>
<ol>
<li>The <a href="http://www.kindleit.net/maven_gae_plugin/" target="_new">maven-gae-plugin</a> is another nice option for <em>starting</em> the SDK&#8217;s local GAE simulation. The advantage of <tt>GoogleDevServer</tt> is that it also <em>stops</em> cleanly, can be run from your IDE and also allows you to add additional files to the WAR before starting. Tweetstore uses that to include login credentials to various cloud storage providers &#8211; not the kind of thing you&#8217;re likely to want to store in Github <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>but see <a href="http://www.youtube.com/watch?v=cKO0RrM7LvI" target="_new"><strong>here</strong></a></li>
<li>CloudBees <a href="http://www.cloudbees.com/acquisitions/stax/" target="_new">acquired Stax</a> in December 2010</li>
<li><em>This</em> is when being able to run from an IDE really comes into its own!</li>
<li>as provided e.g. by <strong><tt>volatile</tt></strong></li>
<li>Actually, the code uses an almost exact clone called <a href="https://github.com/jclouds/jclouds/blob/master/demos/tweetstore/runatcloud-tweetstore/src/test/java/org/jclouds/demo/tweetstore/integration/StaxSdkAppServer2.java" target="_new">StaxSdkAppServer2</a> that simply splits creating the server instance from starting it.</li>
</ol>
</div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/08/03/integration-testing-cloudbees-runcloud/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F08%2F03%2Fintegration-testing-cloudbees-runcloud%2F&amp;title=Integration%20testing%20CloudBees%26%238217%3B%20RUN%40cloud" id="wpa2a_10"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/08/03/integration-testing-cloudbees-runcloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deployment is the new build (part 3)</title>
		<link>http://blog.xebia.com/2011/06/16/deployment-is-the-new-build-part-3/</link>
		<comments>http://blog.xebia.com/2011/06/16/deployment-is-the-new-build-part-3/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 21:08:08 +0000</pubDate>
		<dc:creator>Andrew Phillips</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Xebia Labs]]></category>
		<category><![CDATA[devops]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=6872</guid>
		<description><![CDATA[Earlier this year, I was invited to present a talk at Devopsdays Boston about deployment as the new build: how deployments are carried out now, how they will need to adapt in a more virtualized, on-demand application landscape and what fundamental improvements will need to come before deployment matures into the invisible, it just works&#8482; [...]]]></description>
			<content:encoded><![CDATA[<p><em>Earlier this year, I was invited to present a <a href="http://www.devopsdays.org/events/2011-boston/proposals/deployment_is_the_new_build/" target="_new">talk</a> at <a href="http://www.devopsdays.org/events/2011-boston/" target="_new">Devopsdays Boston</a> about </em><a href="http://www.slideshare.net/apwashere/deployment-is-the-new-build" target="_new">deployment as the new build</a><em>: how deployments are carried out now, how they will need to adapt in a more virtualized, on-demand application landscape and what fundamental improvements will need to come before deployment matures into the invisible, </em>it just works&trade;<em> experience build is today.</em></p>
<p>In the <a href="http://blog.xebia.com/2011/05/deployment-is-the-new-build-part-2/" target="_new">previous post</a>, we looked at how <em>Reusable commands</em>, <em>Models</em> and <em>Conventions++</em> helped turn build from a “black box” process into the “just works” experience we know today. </p>
<p>We then shifted back to deployment and identified <em>Develop a common model</em>, <em>(Re)discover vanilla</em> and <em>Support a &#8220;clean build&#8221;</em> as three key steps required to achieve a similar transition.<br />
<span id="more-6872"></span></p>
<h3>Develop a common model</h3>
<div style="padding: 5px; float: right;"><img src="http://blog.xebia.com/wp-content/uploads/2011/05/deployment-is-the-new-build-p3-1.png" alt="" title="deployment-is-the-new-build-p3-1" width="300" height="225" class="alignnone size-full wp-image-6954" /></div>
<p>Before we can advance to the &#8216;model&#8217; stage, we first&#8230;well&#8230;need a model. Thankfully, a very simple one can suffice: <strong>Packages</strong>, <strong>Environments</strong> and <strong>Deployments</strong>. </p>
<p>There&#8217;s nothing particularly magical to this, and indeed the concepts are commonly found in most organisations. But giving these things explicit labels helps not just formalize the ideas and gives developers and vendors something to support. It also creates a shared vocabulary and language around deployment, which is the first step to shared understanding and reusable functionality.</p>
<p>Indeed, the concepts are so basic that there does not appear to be much to say about them.</p>
<p><strong>Packages</strong> capture the components of the versioned item to be released, both artifacts represented by actual files as well as configuration, resource settings and metadata.</p>
<p>In accordance with release management best practice, packages should be stored in a <a href="http://en.wikipedia.org/wiki/Information_Technology_Infrastructure_Library#Software_Asset_Management" target="_new">DSL</a> and should be independent of the target environment, so that you have one &#8220;gold standard&#8221; package running in Development, Test, QA and Production. </p>
<p>Packages also mean that we can version everything, not just the application binaries but also the related configuration and environment settings.</p>
<p>Development and Test just mentioned are examples of <strong>Environments</strong>, simply collections of infrastructure &#8211; physical, virtual, long-running, on-demand, whatever &#8211; that applications run in as they progress through the <a href="http://en.wikipedia.org/wiki/Software_development_process#Deployment_and_maintenance" target="_new">ALM cycle</a>, potentially with approvals or other checkpoints governing the transition from one to the next.</p>
<p><strong>Deployment</strong>, then, is perhaps the one concept not immediately widely understood. A Deployment represents not just the activity of getting a Package running in a certain Environment, with a start and stop time, executing user, status and so forth. </p>
<p>Rather, a Deployment also documents the way in which the Package&#8217;s components have been deployed and, if applicable, customized. For instance, a Deployment will record that a certain EAR file in the package has been deployed to the following target server(s) or cluster(s), or that the data source password for this specific environment has been customized and set to a new value.</p>
<p>Recording this information is critical because it is very hard to be able to intelligently and correctly modify an application&#8217;s state &#8211; when upgrading to a new version, for instance, or adding new servers to the target cluster &#8211; if you do not know where and with which settings the application is currently running.</p>
<h3>(Re)discover vanilla</h3>
<div style="padding: 5px; float: right;"><img src="http://blog.xebia.com/wp-content/uploads/2011/05/deployment-is-the-new-build-p3-2.png" alt="" title="deployment-is-the-new-build-p3-2" width="301" height="200" class="alignnone size-full wp-image-6955" /></div>
<p>If we are going to achieve hassle-free, push-button deployments, another thing we will have to reconsider is whether we really need to tweak and customize our infrastructure in every way possible. Indeed, some companies seem to almost have a policy that any setting that might be a default should be regarded with suspicion and, preferably, changed.</p>
<p>Much as custom project layouts made setting up a build unnecessarily tedious and complicated in a convention- and model-based system, stubbornly refusing to go with infrastructure defaults will make it harder to get hassle-free deployments that truly cover all the steps required.</p>
<p>Sticking with defaults not only encourages reusability because the chances are much higher that a solution developed for a different scenario will also work in yours. It also improves maintainability and cuts down on the risk of &#8220;ripple&#8221; changes, where a custom value in the setting for the servers hosting application X requires further changes to the setup of application Y etc.</p>
<h3>Support a &#8220;clean build&#8221;</h3>
<div style="padding: 5px; float: right;"><img src="http://blog.xebia.com/wp-content/uploads/2011/05/deployment-is-the-new-build-p3-3.png" alt="" title="deployment-is-the-new-build-p3-3" width="298" height="208" class="alignnone size-full wp-image-6956" /></div>
<p>When building a large project, we try to cut down on the time taken by recompiling only the source code that has been modifying. When deploying applications, we similarly want to save time when upgrading to a new version, especially when this time represents production downtime.<br />
However, we also know that, eventually, some parts of any incremental build will end up going out of sync, causing strange compilation problems, or features or fixes not appearing when they should.</p>
<p>What do we do in such a case? Do we laboriously try to track down the files that are out of sync and rebuild piece by piece? No, we simply run a clean build to start from scratch, because in 99% of cases it&#8217;s much quicker to simply rebuild than try to track down the cause of the problem.</p>
<p>In deployment-land, we seldom have the ability to clean build, and this is one of the main causes for the stressful, time- and resource-consuming troubleshooting hunts that are still far too common. Of course, in order to clean build a system we need full versioning of the environment, its configuration and the applications deployed to it. Virtual appliances and virtualization solutions with snapshot capabilities will have a major role to play here.</p>
<p>We also need a known state for durable resources such as databases, which remains challenging but is being addressed by a growing number of products out there. </p>
<h3>Push button deployments</h3>
<p>Taking stock, it&#8217;s clear that there is still some way to go. We&#8217;re slowly developing a common model, but both &#8220;(Re)discovering vanilla&#8221; and &#8220;Supporting a &#8220;clean build&#8221; are visions not quite yet on the horizon of most large companies.<br />
In fact, it&#8217;s not so much technological advances that are required &#8211; many startups are pretty close to push-button deployments and continuous delivery. Indeed, the &#8220;poster children&#8221; of this movement already have setups where every commit can pass through an entire regression, integration and performance testing suite and potentially go straight to production.</p>
<p>No, the important hurdles to be taken are procedural and mental, changing rusty ways of working and entrenched mindsets. For those that can make it, though, the benefits in terms of accelerated business value are already proving to be game changers.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/06/16/deployment-is-the-new-build-part-3/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F06%2F16%2Fdeployment-is-the-new-build-part-3%2F&amp;title=Deployment%20is%20the%20new%20build%20%28part%203%29" id="wpa2a_12"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/06/16/deployment-is-the-new-build-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deployment is the new build (part 2)</title>
		<link>http://blog.xebia.com/2011/05/21/deployment-is-the-new-build-part-2/</link>
		<comments>http://blog.xebia.com/2011/05/21/deployment-is-the-new-build-part-2/#comments</comments>
		<pubDate>Fri, 20 May 2011 22:49:01 +0000</pubDate>
		<dc:creator>Andrew Phillips</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Xebia Labs]]></category>
		<category><![CDATA[devops]]></category>

	<!-- AutoMeta Start -->
	<category>conventions</category>
	<category>conventions</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=6846</guid>
		<description><![CDATA[Earlier this year, I was invited to present a talk at Devopsdays Boston about deployment as the new build: how deployments are carried out now, how they will need to adapt in a more virtualized, on-demand application landscape and what fundamental improvements will need to come before deployment matures into the invisible, it just works&#8482; [...]]]></description>
			<content:encoded><![CDATA[<p><em>Earlier this year, I was invited to present a <a href="http://www.devopsdays.org/events/2011-boston/proposals/deployment_is_the_new_build/" target="_new">talk</a> at <a href="http://www.devopsdays.org/events/2011-boston/" target="_new">Devopsdays Boston</a> about </em><a href="http://www.slideshare.net/apwashere/deployment-is-the-new-build" target="_new">deployment as the new build</a><em>: how deployments are carried out now, how they will need to adapt in a more virtualized, on-demand application landscape and what fundamental improvements will need to come before deployment matures into the invisible, </em>it just works&trade;<em> experience build is today.</em></p>
<p>In the <a href="http://blog.xebia.com/2011/05/deployment-is-the-new-build-part-1/" target="_new">previous post</a>, we compared deployment to another key process in the application lifecycle &#8211; build &#8211; and asked which key developments turned <em>it</em> from a magical &#8220;black box&#8221; into the &#8220;just works&#8221; process it is today. </p>
<p>We identified <em>Reusable commands</em>, <em>Models</em> and <em>Conventions++</em> as three key steps, which we&#8217;ll look into in more detail in this post. Then, we&#8217;ll shift back to deployment and ask which improvements will be essential to getting to &#8220;just works&#8221; here.<br />
<span id="more-6846"></span></p>
<h3>Reusable commands</h3>
<div style="padding: 5px; float: right;"><img src="http://blog.xebia.com/wp-content/uploads/2011/05/deployment-is-the-new-build-p2-1.png" alt="" title="deployment-is-the-new-build-p2-1" width="250" height="154" class="alignnone size-full wp-image-6861" /></div>
<p>The first step, epitomised by <a href="http://ant.apache.org/" target="_new">Apache Ant</a>, was the recognition that most of the low-level tasks or actions are the same whatever application is being built, whether calling a compiler, copying files or replacing placeholders.<br />
Rather than copy-pasting the same OS commands into every new build script, we encapsulated these commands as libraries of reusable components that only needed to be written once.<br />
Further, we discovered that certain patterns of step sequences would appear in many different builds. These &#8216;chunks&#8217;, such as constructing a classpath, or copying and processing static resources, evidently represented some higher-level build activity with a distinct function.</p>
<h3>Models</h3>
<div style="padding: 5px; float: right;"><img src="http://blog.xebia.com/wp-content/uploads/2011/05/deployment-is-the-new-build-p2-2.png" alt="" title="deployment-is-the-new-build-p2-2" width="250" height="150" class="alignnone size-full wp-image-6862" /></div>
<p>Whilst the realisation that all the actions carried out in a build are basically a sequence of common chunks was an important start, the next big advance was brought about by recognising that we weren&#8217;t just seeing repeated patterns of actions, but that the types of data these actions were working on were also shared.<br />
This gave rise to the notion of a true domain model for application builds, with source sets, resource sets, modules, dependencies and so forth that were originally introduced by <a href="http://maven.apache.org/" target="_new">Maven</a> and have featured and been reused in all build systems since.</p>
<p>Combining the sequence of common chunks with the new domain model that structured the data being processed gave rise to notion of distinct phases, in which parts of the build model are generated, prepared and made available to subsequent commands.<br />
In addition, Maven also supported the idea that the domain model, and thus the build phases, would have to be able to vary slightly to accommodate different types of Java artifacts that need to be delivered, such as JARs and EARs. This has subsequently been further developed to support builds of totally different technologies such as <a href="http://flexmojos.sonatype.org/" target="_new">Adobe Flex applications</a>.</p>
<h3>Conventions++</h3>
<div style="padding: 5px; float: right;"><img src="http://blog.xebia.com/wp-content/uploads/2011/05/deployment-is-the-new-build-p2-3.png" alt="" title="deployment-is-the-new-build-p2-3" width="250" height="172" class="alignnone size-full wp-image-6863" /></div>
<p>An additional benefit of domain models for build was the ability to make use of default values in a structured way, for instance for the names of built artifacts or the location of resource files.<br />
However, the flip side of this convenience, certainly in combination with <a href="http://maven.apache.org/pom.html" target="_new">XML</a> as a descriptor language for builds, meant that deviating from these standards could be quite a challenge. Certainly if the aim was to extend the domain model in some way, or to support a language or technology whose build flow was reasonably different from Java&#8217;s, such as building documentation bundles or virtual machine images, for instance.<br />
This has led to a generation of build tools, such as <a href="http://www.gradle.org/" target="_new">Gradle</a>, that aim to restore the developer to a position of full control in which arbitrary actions can easily be defined and organised into phases, tasks and entire builds. Of course, given how used we have become to the convenience of &#8220;it just works&#8221; in simple cases, these tools still support the full domain models and conventions of <a href="http://www.gradle.org/standard_plugins.html" target="_new">common technologies</a> such as Java.</p>
<h3>Who&#8217;d have thought?</h3>
<p>Reviewing this progression from today&#8217;s perspective, a couple of facts stand out that, certainly in comparison to other evolutions in IT, are quite surprising.<br />
Firstly, whilst it&#8217;s now hard to imagine specifying a dependency using anything other than the <a href="http://maven.apache.org/pom.html#Dependencies" target="_new">groupId:artifactId:version</a> pattern, none of the models or conventions that developed were formalised in industry standards. Instead, they were either based on observations of common patterns, or simply clever or even somewhat arbitrary choices (<a href="http://maven.apache.org/pom.html#Directories" target="_new"><tt>src/main/java</tt></a>, for instance).<br />
Secondly, we have seen how ease-of-use based on conventions, coupled with a moderate nuisance factor of tweaking those conventions, can dramatically change user behaviour. Initially, for instance, many of those new to Maven spent quite a significant amount of time, and produced a fair amount of XML, to change the standard settings to match their own environment, naming conventions, file paths etc.<br />
Pretty soon, though, and especially as the ratio of green field vs. legacy projects increased, it simply became easier to stick with Maven&#8217;s standard values and be done with it. Today, these conventions have become so standardised that they are supported not just by Maven, but essentially all other build systems out there, too.<br />
It&#8217;s not just users&#8217; preferences that were &#8220;charmed&#8221; into adopting standard conventions, though. In many cases, company standards previously seen as cast-iron were progressively discarded or modified if they could easily not be accommodated by the emerging de facto standards. Ease-of-use was able to triumph against abstract rules.</p>
<h3>And deployment?</h3>
<p>So much for the build process. What about deployment, today&#8217;s critical hurdle for automation in the business value delivery chain? As previously mentioned, the current industry average is somewhere between &#8220;black box&#8221; and &#8220;step sequence&#8221;. In terms of the descriptions of the build process evolution, the most advanced deployment automation systems are somewhere just beyond &#8220;reusable commands&#8221;, in other words.<br />
Which naturally begs the question: how do we get to a push-button state? What do we need to do to be able to reach the maturity level of build today?<br />
Looking at what we encounter in the industry today, three critical aspects will be:</p>
<ol>
<li><strong>Develop a common model</strong></li>
<li><strong>(Re)discover vanilla</strong></li>
<li><strong>Support a &#8220;clean build&#8221;</strong></li>
</ol>
<p>We’ll cover the details of these three concepts in the <a href="http://blog.xebia.com/2011/06/deployment-is-the-new-build-part-3/" target="_new">next blog</a>…</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/05/21/deployment-is-the-new-build-part-2/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F05%2F21%2Fdeployment-is-the-new-build-part-2%2F&amp;title=Deployment%20is%20the%20new%20build%20%28part%202%29" id="wpa2a_14"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/05/21/deployment-is-the-new-build-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deployit integrated with WebSphere CloudBurst Appliance for applications on demand</title>
		<link>http://blog.xebia.com/2011/05/08/deployit-integrated-with-websphere-cloudburst-appliance-for-applications-on-demand/</link>
		<comments>http://blog.xebia.com/2011/05/08/deployit-integrated-with-websphere-cloudburst-appliance-for-applications-on-demand/#comments</comments>
		<pubDate>Sun, 08 May 2011 14:01:43 +0000</pubDate>
		<dc:creator>Vincent Partington</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[Xebia Labs]]></category>

	<!-- AutoMeta Start -->
	<category>cloudburst</category>
	<category>appliance</category>
	<category>topologies</category>
	<category>virtual</category>
	<category>deployit</category>
	<category>websphere</category>
	<category>deploys</category>
	<category>deploy</category>
	<category>cloudburst</category>
	<category>appliance</category>
	<category>topologies</category>
	<category>virtual</category>
	<category>deployit</category>
	<category>websphere</category>
	<category>deploys</category>
	<category>deploy</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=6828</guid>
		<description><![CDATA[At XebiaLabs, we have recently been working on an exciting new integration for Deployit, our deployment automation product. We&#8217;ve created a Deployit plugin that allows you to deploy EAR files directly to virtual systems created by IBM&#8217;s WebSphere CloudBurst Appliance (WCA). But a small piece of background first. Deployit and WebSphere CloudBurst Appliance both &#8220;deploy&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>At XebiaLabs, we have recently been working on an exciting new integration for <a href="http://www.xebialabs.com/features">Deployit</a>, our deployment automation product. We&#8217;ve created a Deployit plugin that allows you to deploy EAR files directly to virtual systems created by IBM&#8217;s <a href="http://www-01.ibm.com/software/webservers/cloudburst/">WebSphere CloudBurst Appliance</a> (WCA).</p>
<p>
But a small piece of background first. Deployit and WebSphere CloudBurst Appliance both &#8220;deploy&#8221; things. But they deploy different things. Deployit deploys application artifacts and resources such as EAR files and data sources to middleware systems like WebSphere Application Server (but also HTML to web servers, MQ configuration to queue managers, etc.). The WebSphere CloudBurst Appliance on the other hand, deploys patterns (topologies) of virtual images to hypervisors. But not just any kind of virtual images. It is especially geared towards deploying middleware topologies. In other words, the software Deployit wants to deploy <em>to</em>! This means that the functionalities of WCA and Deployit are a perfect fit; have WCA deploy the middleware systems and have Deployit deploy applications to those middleware systems.<br />
<a href="http://blog.xebialabs.com/2011/05/08/deployit-integrated-with-websphere-cloudburst-appliance-for-applications-on-demand/#more-6828" class="more-link">(more&#8230;)</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/05/08/deployit-integrated-with-websphere-cloudburst-appliance-for-applications-on-demand/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F05%2F08%2Fdeployit-integrated-with-websphere-cloudburst-appliance-for-applications-on-demand%2F&amp;title=Deployit%20integrated%20with%20WebSphere%20CloudBurst%20Appliance%20for%20applications%20on%20demand" id="wpa2a_16"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/05/08/deployit-integrated-with-websphere-cloudburst-appliance-for-applications-on-demand/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deployment is the new build (part 1)</title>
		<link>http://blog.xebia.com/2011/05/03/deployment-is-the-new-build-part-1/</link>
		<comments>http://blog.xebia.com/2011/05/03/deployment-is-the-new-build-part-1/#comments</comments>
		<pubDate>Tue, 03 May 2011 19:35:06 +0000</pubDate>
		<dc:creator>Andrew Phillips</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Xebia Labs]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[devops]]></category>

	<!-- AutoMeta Start -->
	<category>devopsdays</category>
	<category>boston</category>
	<category>devopsdays</category>
	<category>boston</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=6782</guid>
		<description><![CDATA[Earlier this year, I was invited to present a talk at Devopsdays Boston about deployment as the new build: how deployments are carried out now, how they will need to adapt in a more virtualized, on-demand application landscape and what fundamental improvements will need to come before deployment matures into the invisible, it just works&#8482; [...]]]></description>
			<content:encoded><![CDATA[<p><em>Earlier this year, I was invited to present a <a href="http://www.devopsdays.org/events/2011-boston/proposals/deployment_is_the_new_build/" target="_new">talk</a> at <a href="http://www.devopsdays.org/events/2011-boston/" target="_new">Devopsdays Boston</a> about </em><a href="http://www.slideshare.net/apwashere/deployment-is-the-new-build" target="_new">deployment as the new build</a><em>: how deployments are carried out now, how they will need to adapt in a more virtualized, on-demand application landscape and what fundamental improvements will need to come before deployment matures into the invisible, </em>it just works&trade;<em> experience build is today.</em></p>
<p>In this first post, we&#8217;ll focus on some of the changes and trends across the industry that have brought such increased business attention to the area of release, deployment and management of applications.<br />
<span id="more-6782"></span><br />
As companies focus on tuning their IT environment on rapid delivery of business value, more and more projects and initiatives within organisations are looking at the entire value chain of software production.</p>
<p>Whether under the banner of <a href="http://www.devopsdays.org" target="_new">Devops</a>, via integrated project teams or as part of the introduction of new development methodologies like <a href="http://en.wikipedia.org/wiki/Agile_software_development" target="_new">Agile</a><sup>1</sup> or infrastructure technologies such as <a href="http://www.nist.gov/itl/cloud/" target="_new">cloud</a><sup>2</sup>, there is a growing awareness of the need for automated, reliable and flexible deployment procedures.</p>
<p>Whilst it&#8217;s clear that the generation of customer features takes place within the development, testing and QA teams, the business value inherent in these features is only unlocked once the application is actually running in a target environment, accessible to users. And it&#8217;s not just the final release to production that requires a deployment: every UAT, performance or integration test generally needs an application running in a &#8220;real&#8221; environment, not a developer&#8217;s local machine. One test, one deployment. </p>
<p>Given the well-known costs and adverse effects of faulty software in production, the ability to raise quality, usability and performance through a greatly increased number of testing cycles represents significant added value in itself.</p>
<p>One of the consequences of this increased attention is that the importance of build, release and deployment professionals as deliverers of business value is being recognized more and more. The heightened focus also means, though, that many companies are realizing that the effectivity, simplicity and overhead of their release and deployment processes lag far behind that of build and continuous integration.</p>
<p>As my role at <a href="http://www.xebialabs.com" target="_new">XebiaLabs</a> involves studying, automating and improving deployment processes across the industry and helping developing our vision for deployment into the future, the question of why deployment is so different from build in today&#8217;s enterprises was bound to raise its head sooner or later. The resulting discussions and reflections formed the basis for this series.</p>
<h3>What&#8217;s in a word?</h3>
<p>One of the challenges surrounding the discussion of deployment in relation to build, release, provisioning and other tasks in the <a href="http://en.wikipedia.org/wiki/Application_lifecycle_management" target="_new">ALM</a> space is the &#8211; decreasing, thankfully &#8211; lack of a clear shared definition for <em>deployment</em>. Without wanting to promulgate this as the correct definition, for the context of this discussion I&#8217;d like to treat deployment as the process that</p>
<blockquote><p><em>takes the components that make up a release (typically a specific version of an application) and getting them correctly set up in an infrastructure environment so that the release is accessible to (end) users</em>
</p></blockquote>
<p>This would differentiate it from <em>build</em> and <em>release</em> in that it assumes that the application components have already been created, and from <em>provisioning</em> and other infrastructure tasks in that the target infrastructure is already assumed to be present. </p>
<p>On-demand virtual or cloud environments, or virtual appliances, put a bit of a different spin on the issue, and will be a topic for a subsequent blog.</p>
<h3>Blast from the past</h3>
<div style="padding: 5px; float: right;"><img src="http://blog.xebia.com/wp-content/uploads/2011/05/deployment-is-the-new-build-p1-1.png" alt="" title="deployment-is-the-new-build-p1-1" width="131" height="127" class="alignnone size-full wp-image-6785" /></div>
<p>Taking the above as our working definition, the sobering picture is that, with very few exceptions, deployment now is pretty much at the stage where build was in the days of the make guru: a black box put together and operated by a specialist that somehow works. With luck, this precious resource is still employed and around to fix or extend things when required, but if he or she is out to lunch you&#8217;re simply out of luck.</p>
<p>To be fair, there are quite a few places where there is least tooling or automation in place that tries to map out the sequence of steps or actions required to carry out a deployment, to at least bring some visibility and traceability and shine some light on the &#8216;magic&#8217;. But this is still a long way away from the push-button experience that build is nowadays. Laboriously visualizing and walking through a process step-by-step is still a sign ultimately of a lack of trust; a truly mature process doesn&#8217;t display its internals any more, it &#8220;just works&#8221;. Much like build today.</p>
<h3>The road to &#8220;just works&#8221;</h3>
<div style="padding: 5px; float: right;"><img src="http://blog.xebia.com/wp-content/uploads/2011/05/deployment-is-the-new-build-p1-2.png" alt="" title="deployment-is-the-new-build-p1-2" width="131" height="136" class="alignnone size-full wp-image-6786" /></div>
<p> Of course, build didn&#8217;t start out as a &#8220;just works&#8221; process either, so what actually were the steps that made this transition possible? Looking at the evolution of Java build tooling over the past decade or so, there have been at least three main developments:</p>
<ol>
<li><strong>Reusable commands</strong></li>
<li><strong>Models</strong></li>
<li><strong>Conventions++</strong></li>
</ol>
<p>We&#8217;ll dive into the details of these three concepts in the <a href="http://blog.xebia.com/2011/05/deployment-is-the-new-build-part-2/" target="_new">next blog</a>&#8230;</p>
<div style="background-color: #EFEEEA; border: 1px solid #AAAAAA; margin: 0.8em; padding: 0.4em; font-size: 85%;">
<strong>Footnotes</strong></p>
<ol>
<li>Which my colleagues from Xebia, as recognised <a href="http://www.xebia.com/agile-consultancy" target="_new">world-wide Agile experts</a>, are much better positioned to <a href="http://blog.xebia.com/category/agile/" target="_new">talk about</a>.</li>
<li>For which there are almost as many alternative definitions as <a href="http://cloud-standards.org/wiki/index.php?title=Main_Page" target="_new">standards and industry organisations</a>, admittedly.</li>
</ol>
</div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/05/03/deployment-is-the-new-build-part-1/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F05%2F03%2Fdeployment-is-the-new-build-part-1%2F&amp;title=Deployment%20is%20the%20new%20build%20%28part%201%29" id="wpa2a_18"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/05/03/deployment-is-the-new-build-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Future of Deployment &#8211; Part 2.5 Getting your virtual appliance from development to production</title>
		<link>http://blog.xebia.com/2010/08/16/future-of-deployment-part-2-5-getting-your-virtual-appliance-from-development-to-production/</link>
		<comments>http://blog.xebia.com/2010/08/16/future-of-deployment-part-2-5-getting-your-virtual-appliance-from-development-to-production/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 06:25:50 +0000</pubDate>
		<dc:creator>Robert van Loghem</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[Xebia Labs]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=5181</guid>
		<description><![CDATA[In my previous post, &#8220;future of deployment, part 2&#8243;, i talked about the new ear, which is an image, with an OS and your application. Now before diving into part 3, which gets you going in creating your own virtual appliance aka &#8220;the image&#8221;, there is one really big thing i forgot to mention; Some [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.xebia.com/wp-content/uploads/2010/08/Virtual-Appliance.png"><img src="http://blog.xebia.com/wp-content/uploads/2010/08/Virtual-Appliance.png" alt="Virtual Appliance" title="Virtual Appliance" width="200" height="245" class="alignleft size-full wp-image-5182" /></a></p>
<p>In my previous post, <a href="http://blog.xebia.com/2010/06/13/future-of-deployment-part-2-the-image-in-the-cloud-is-the-new-ear/">&#8220;future of deployment, part 2&#8243;</a>, i talked about the new ear, which is an image, with an OS and your application.<br />
Now before diving into part 3, which gets you going in creating your own <em>virtual appliance aka &#8220;the image&#8221;</em>, there is one really big thing i forgot to mention; Some of the benefits of delivering a virtual appliance and getting it from your own development to the production environment! and i&#8217;ll list the benefits for administrators/ops and developers.<br />
<span id="more-5181"></span><br />
<strong>Ask and thou shall receive, thy environment, immediately <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> </strong></p>
<p>So you start developing your new application &#8220;CuteAnimalPark&#8221; (yes, we at Xebialabs like animals <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ), and you talk to the admins and ask them for 3 environments, Test, Acceptance and Production. They of-course respond, &#8220;that is fine, we&#8217;ll have it up-and-running when you can deliver your application&#8221;, aka &#8220;virtual appliance&#8221; and give you a link where you can download the Virtual Image where you can install your application on.</p>
<p>So what happened here? Well i wanted 3 environments and got none!? But i did get some image which is in fact the image that is going to run in production. The image is hardened, has got security enabled, all user accounts and file-system rights are in order and is tuned for real world serving the interwebs.</p>
<p>The job of the operators is to make sure applications get to production and run reliably and fast. They are the ones getting called out of bed if my application dies at 3 AM. So therefore they want to give you an image which is the SAME that is going to run in production.<br />
That means IMHO, one of the day-time jobs of these guys and gals is to prepare the images (OS + middleware) for applications and give them out to development teams so they can in turn create virtual appliances.</p>
<blockquote><p><em><strong>Action #1</strong></em> Get a production ready image to install the application on.<br />
<em><strong>Benefit for Devs #1</strong></em> You develop and deploy to &#8220;really-really-close-to&#8221; production system<br />
<em><strong>Benefit for Ops #1</strong></em> You get an application that is known to run on a production system</p></blockquote>
<p><strong>Running the production image aka virtual appliance in other environments then production</strong></p>
<p>So when you have installed the application on the image you have to make sure it can be used in other environments then development. The application might need to connect to a database, now the database will mostly differ from one environment to the other, so as soon as the application is placed into the environment, you have to get in there and change the URL and most probably, username and password of the datasource the application is using so it will connect to the e.g. database in test and not the developers own MySQL database on his local machine.</p>
<p>Changing the way an application uses a database should be just as easy by changing the properties on a datasource, and most of the JEE containers make this fairly easy, but i&#8217;ve personally seen lots of other properties which are very environment specific which were in property files, in JAR files that needed changing when moving the application from one environment to the other. Not so easy then ;(</p>
<p>Make sure that when you design and develop your application that environment specific properties are easily accessible and can be changed by operators.</p>
<blockquote><p><em><strong>Action #2 for Devs</strong></em> <a href="http://blog.xebia.com/2010/07/05/customize-this-tailoring-deployment-packages-to-your-target-environments/">Design and Build</a> your application so it can exist in multiple environments<br />
<em><strong>Action #2 for Ops</strong></em> This also applies to Operators, who have to be aware that the image they deliver will need to run in different environments (e.g. use hostnames when installing middleware and don&#8217;t use IP-addresses)<br />
<em><strong>Benefit for Devs #2</strong></em> Your application is portable, it can be moved almost anywhere and administrators can do it without your help<br />
<em><strong>Benefit for Ops #2</strong></em> Easily move images to wherever you want, move stuff from your private cloud to the public, will be a lot easier! per application.</p></blockquote>
<p><a href="http://blog.xebia.com/wp-content/uploads/2010/08/Deploy-Virtual-Appliance1.png"><img src="http://blog.xebia.com/wp-content/uploads/2010/08/Deploy-Virtual-Appliance1.png" alt="Deploy Virtual Appliance" title="Deploy Virtual Appliance" width="500" height="279" class="alignleft size-full wp-image-5193" /></a></p>
<p>After this step, it means that your virtual appliance can now be deployed to the various environments, which of-course are running some sort of virtualization hypervisor from some known <a href="http://www.vmware.com/products/vsphere/esxi-and-esx/index.html">vendor</a>. Every time the appliance is deployed, before it is started the operators configure it. Making sure the Datasource connects to the right database, the Queues connect to the right Message broker, and so on.<br />
After configuring the application you can start up the whole bunch and <em>bask in glory</em>. (make sure the ops know in how to properly start the application and how they can tell it works)</p>
<p><strong>The flow from development to production is that simple, but wait! there&#8217;s more, troubleshooting?</strong></p>
<p>Again here is the flow from the 2 paragraphs above:<br />
<em>- Get a production like image<br />
- Install your application on it<br />
- Allow operators to move your virtual appliance from test to production (without needing your assistance)</em></p>
<p>But of-course stuff can go wrong in production, your application might break, has a race condition under extreme load, and you as a developer want to get your hands on production and find out what is wrong. But alas, the operators will not allow you to access production, most likely they&#8217;ll send you the logs, thread and heap dumps but that is it. So wouldn&#8217;t it be nice if you could have the access to production when it is not used in production?</p>
<p>With virtualization you can get a snapshot of the images running in production, transfer it to your local development environment and really get into finding the problem. There is always the trouble of generating real user requests but this is a very big step forward to get your hands where the real problem occurred.</p>
<blockquote><p><em><strong>Action #3</strong></em> Whenever an issue pops up with an application, create a <a href="http://www.vmware.com/products/labmanager/features.html">snapshot</a> of the image and let the developer have access to it<br />
<em><strong>Benefit for Devs #3</strong></em> You can get to the source of the problem more easily<br />
<em><strong>Benefit for Ops #3</strong></em> You still don&#8217;t need to give access to developers on production if you don&#8217;t want to, just let them have a copy of the current state of production</p></blockquote>
<p><strong>Makes sense?</strong></p>
<p>Well there you have it, this is what i think will be the biggest change in the way we deploy an application from development to production in about 3-5 years. As i mentioned before, post 3 will be about doing it yourself with the current tools available, from <a href="http://www.xebialabs.com/deployit">Xebialabs</a> of-course and <a href="http://www.vmware.com/products/labmanager/">VMWare</a>.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2010/08/16/future-of-deployment-part-2-5-getting-your-virtual-appliance-from-development-to-production/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2010%2F08%2F16%2Ffuture-of-deployment-part-2-5-getting-your-virtual-appliance-from-development-to-production%2F&amp;title=Future%20of%20Deployment%20%26%238211%3B%20Part%202.5%20Getting%20your%20virtual%20appliance%20from%20development%20to%20production" id="wpa2a_20"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2010/08/16/future-of-deployment-part-2-5-getting-your-virtual-appliance-from-development-to-production/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  blog.xebia.com/category/virtualization/feed/ ) in 1.37875 seconds, on Feb 9th, 2012 at 6:10 pm UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 9th, 2012 at 7:10 pm UTC -->
