A deployment package arguably is never just a single file to be dropped somewhere and you are done. No! Choosing and bundling your artifacts for deployment is none less complex than figuring out an efficient deployment strategy itself. The Java EE specification suggests EARs as the standard packaging and distribution mechanism but we all know that this is not enough. In reality the ‘deployment package’ comprises a whole list of artifacts and more:
In short, an EAR and a lot around it! But wait, there is still more, what about the plethora of environment specific configurations that also go along?
This leads to a few questions and the reason for this blog.
What goes into a deployment package and what not? Is there any standard way of deciding the grouping? What are the factors that influence the bundling and how can the environment specific properties be managed?
There is no simple answer but let’s start by categorizing the components that can be a part of the deployment package. Broadly there are four categories of components.

Keeping this in mind, the following patterns (in order of maturity) can be observed across the IT landscape:
There is no standard followed as such. An application build with the artifacts is released to the deployers. The deployers carry out the required setup and deploy the app by referring to a deployment document which may or may not be a part of the release. This document could just be an email describing the required steps to be carried out or a first cut release document. This document also holds the environment specific configurations and settings. It may sound too rudimentary but it is a common practice even in large organizations.

Each release is accompanied by a deployment release note where you can find all environment specific steps and configuration for development, test and production. The initial release may be a detailed “How to deploy” booklet followed by later delta releases. These delta documents just have instructions for how to tweak or steps and configuration for the changes. A general deployment document will have details like which database scripts to be executed, which queues to be created on which server, configurations to connect to LDAP etc. And also the configuration properties required for each environment. This is definitely better than the previous scenario but still can give you nightmares.

A release structure is decided and followed with a definite format to arrange the artifacts.
There may be a release document but the focus is more on moving the Deployment Knowledge from the documents and making them available for automation. So it is moving from manual deployments to automated deployments.
A typical automation ready deployment package would consist of neatly arranged artifacts, accompanied by environment specific configurations and likely the deployment scripts as well. So is it good? To a point, yes. It makes your deployments reliable and faster. But as you can see there is high coupling of the environment specific configurations with your deployment artifacts both being a part of the deployment package. This leads to some new issues that need to be addressed:
So there are certain visible drawbacks and limitations of bundling the environment configurations into the deployment package itself. Is there a way out?

From our experience we have learnt that an ideal unit of deployment should have the following characteristics:
Is it possible to keep the deployment package simple and yet reap the benefits of deployment automation? With Deployit that is exactly what we want to achieve.
In the next blog we followup with Deployit’s approach and proposals to ‘get it right’.
Filed under Deployment, Middleware, Xebia Labs | 3 Comments »
Thanks for this insightful entry, I think we got it pretty right
This looks very promising…if it is going to work it will be great! (except I will be out of a job…
The largest benefit might be applying environment configuration automatically. But, should the environment configuration not also be versionable? Environment specific settings might change between releases (they do). Deployit should be able to couple a release version with a version of env-specific settings for all the environments.
Two deployment units might require different versions of env-specific settings, creating a conflict. A possible solution is to have one deployment unit per application containing all artifacts, coupled with one environment configuration set. The release must then be tested and accepted as a whole, no more last minute bugfixes in that single Ear…
Interesting read i think your website is good with informative content which i like to add to my bookmarks. I’d like to share everyone this new type of app that allows you to spy on other peoples mobile pretty clever if you ask me check out cell phone tracking