Continuous delivery
After Continuous Integration, this is the word we see on the web
these days. Its meaning is really simple, it consists in reducing
steps in application deployment. In order to do so a set of tools
actually exists, you can use the same PaaS images (thanks to the
newcomer
Micro Cloud Foundry by VMWare
or use a special amazon ec2 instance) to have a development
environment similar to production one. And you can use
Chef to
manage and automate your configuration. While these alternatives are
really interesting, I think they are way too powerful and difficult
to setup in simple cases.
I will explain my "simple" solution based on maven, shell scripts
and hostname detection.
Example release archive
An example is better than a thousand words, you will find an example
of my solution in a github repository
Easy Release Archive. It is a maven project building a zip artifact containing
everything to be deployed, and an example script to setup the
Glassfish server.
What is inside ?
To understand how it works, the best thing is to look what's inside.
-
an
assembly.xml file
describing the files to include and their output name and
location.
-
a few scripts in /src/main/resources
-
sanityCheck.sh
: helper script sourcing the correct variables depending on
the hostname of the machine and ensuring variables are
correctly setup
-
setupGlassfish.sh
: a sample script used to setup a Glassfish server with its
required datasources and other parameters
-
a
global
folder containing global configuration files
-
a per hostname folder (in my case
samva-mbp) containing a
shell/envSetup.sh
shell script to setup necessary variables and a
config
folder for special environment configuration files.
-
the
pom.xml
file describing artifact versions to use in the assembly and the
lifecycle to use.
A simple mvn package will build the zip archive with everything
described in the assembly.xml file. You will just have to unzip and
run the script(s) corresponding to the application deployment for it
to be done. You can add this command line to your build server and
you will have a simple but powerful continuous delivery system !