[chef] Re: ideas on deploying java applications


Chronological Thread 
  • From: Jeppe Nejsum Madsen < >
  • To:
  • Subject: [chef] Re: ideas on deploying java applications
  • Date: Tue, 5 Oct 2010 21:59:55 +0200

We're doing the same thing. A few comments below:

On Tue, Oct 5, 2010 at 6:36 PM, Seth Chisamore 
< >
 wrote:
> Fellow Cooks,
> I've been brainstorming on the best approach to incorporate Java-based web
> application deployments into the Chef ecosystem.  The tricky thing we have
> to contend with, is the two step build/deploy process most Java applications
> go through.  In most Java shops code is checked out from the SCM and then
> some sort of build framework like Maven compiles and packages the
> application down into a deployable artifact (usually a WAR file).  This
> artifact is then deployed into the Java application server(s).
>
> Right now the data-bag driven application cookbook uses a one-step
> approach...ie code is just checked out and sym-linked as "current".  It
> would be nice to have a Java application that is deployed via this cookbook
> follow a similar pattern.  The application cookbook can just pull the final
> deployable WAR file down from some arbitrary location...ie a valid URL whose
> reference lives in the application data bag.

This is how we do it. The build step uploads to S3 with a  build #,
the cookbook downloads and symlinks.

> We still have to deal with the "build" portion though....or do we?

I don't think so. I would hate to have all the build dependencies
installed on the server.

> Most
> Java shops that are using something as sophisticated as Chef for application
> deployments probably already have a continuous integration server that does
> "builds".  That's awesome and we shouldn't change it!  What we need to do is
> just hook into this workflow...ie have Chef be the final mile.
>

Precisely.

> In order to solve this I propose creating a Maven plugin that would do the
> following after a successful build:
> -push the completed WAR to a configurable distribution point (Artifactory,
> S3 etc.).
> -grab a reference to the completed WAR (artifact download url)
> -make an authorized PUT request to the Chef server and update the
> application data bag with the the WAR's new location/name.  We could
> probably leverage the jclouds chef-client to do this (ie the CI server or
> build machine becomes a node).
>
> The next time the chef-client runs on all application servers the new
> artifact should be pulled down and the deployment is complete.  I think
> creating a Maven plugin is the best approach since most CI servers work well
> with Maven.  A smaller shop that doesn't have a CI server could also just
> check the code out of SCM and perform a build via Maven.
>
> Thoughts?
>
> Seth

We don't use Maven but Gradle. It was pretty simple to script upload
to S3. I think the main part is to get a good Chef cookbok that
supports deployment as well as rollback to previous verions as well as
hooks for db updates etc :-)

/Jeppe



Archive powered by MHonArc 2.6.16.

§