views:

1064

answers:

4

I'm looking for solutions, preferably open source, that can manage deployments of multiple interdependent java web-applications.

The solution requires an ability to create and store a release specification containing multiple items for release - specific versions of each application and relevant other artifacts (database config, apache config etc.).

The specification then needs to be parsed and each item then need to be deployed/executed on a target environment. Target environment is linux based. Web-apps are vanilla wars running on a j2ee standard app server.

A lot to ask?

Currently I think all the bits are in place - the binary artifacts are released with the maven release plugin and hence available from our maven repo for deployment, the database is versioned with dbdeploy and the apache config is versioned in svn. However I don't know of any tool that can put all these steps together on multiple applications.

My current preferred approach is to use a form of a parameterised build for hudson to create the specification. Then a second parameterised build to select a pre-created specification and deploy/execute it on a chosen environment.

However this seems to be a lot of work and a less than optimal custom solution.

Anyone know any prebuilt better ideas? or suggestions for for how to approach this - maybe a workflow engine would be better than hudson? maybe a custom web app?

Notes:

The target environments are prebuilt with all requirements in place - e.g. java and app server installed, database running etc. This is less of an environment configuration question and more of a deployment question.

Automating deployment of single apps is a problem with many solutions e.g. cargo, ant deployment scripts etc. However I need something that can wrap multiple deployments. E.g. kick off cargo on specific versions of multiple apps and their requirements.

+5  A: 

Sounds like you need a chef to cook your configuration :)

Jim Barrows
+1, looks interesting
Rich Seller
+3  A: 

Deployment is a complicated business. Maven has many of the plugins you could need to manage a deployment, but it takes some configuration to get it to do exactly what you want. The following describes how each of your issues could be addressed. Though depending on your environment, it might be more trouble than it's worth.

The maven Cargo plugin can be used to deploy the applications. Obviously this can be quite involved but Cargo is a pretty good tool for managing deployments.

The apache config could be packaged as a separate jar by your build process and deployed to the repository, then downloaded/published for use in your deployment jar (the dependency plugin can be used to pull the config jar from the repository). Alternatively Maven has an scm api that can be used to invoke arbitrary commands against your SCM repository (see this answer for an example plugin using the SCM API.

As far as I know there isn't a Maven plugin for dbdeploy, but this blog post shows how the maven-antrun-plugin can be used to script the deployment.

Rich Seller
Automate deployment of single apps is relatively easy with cargo etc. However I need something that can wrap multiple deployments. E.g. kick off cargo on specific versions of multiple apps
Pablojim
+3  A: 
Pascal Thivent
Why is it that Pascal Thivent always has exactly the right answer? I'm beginning to think that he is the smartest man alive. ControlTier is a fantastic choice for this process.While I think you could hobble together something Mavenish to do this deployment, I'm not a big fan of pushing Maven to do this sort of work.
tobrien
+2  A: 

Smart Frog is also worth looking at.

cetnar