If
you have got this far you are probably already thinking that your
application deployments needs improvement. Maybe you have one or more
of the following deployment 'smells':
- home grown 'release' scripts that differ between applications
- manually scp/sftp/rsync software
- manually edit property files in production
- complex release notes
These
can result in slow, unreliable, unrepeatable deployments which will
not scale. But where do we start in transforming a release process? The key to an effective release process is consistency. Before we get to discussing Vamos Deploy there are areas that can be tackled in preparation which will reap rewards later on.
Packaging:
Vamos
does not enforce a packaging methodology, its very open. The only
rule is that there needs to be a ‘bin’ directory and all of its
contents will be granted execute permissions. You have the flexibility to build,
as you require, on top of this single rule. Though we do recommend
setting a basic standard layout so most packages have the same look
and feel.
Naming
conventions, with a little thought, can make life much easier in the
long run. A common mistake is to embed the management structure
rather than the business into the name. The management structure can
change frequently so can make naming obsolete.
A
good naming standard would contain the business name, the application
suite, application name and application instance. You should end up
with names in the region of 10-15 chars in length. CamelCase is a
good idea also.
Version
numbers used for applications should follow the semantic versioning
pattern of MAJOR.MINOR.PATCH. See http://semver.org/
If
you have packages that are very large they will take a long time to
deploy. If you change just 5% of a large package then 95% will be
redeployed for no gain. So, try to split up large packages into
smaller ones. We will use a Vamos Grid to link them together. As a
rule of thumb, a package of more than 250Mb sounds large.
How
many is the right number of packages? This varies hugely but a good
rule of thumb is to have between 10 and 50. More packages, will mean
more to manage. Its a balancing act between speed and manageability.
One
idea is to split packages, instead of by function, by the frequency
of change. Package independently, parts that change frequently. Then
your deployment is fast and you have few moving parts.
Runtime:
Standardisation
of runtime environments can bring huge benefits. Most of the next
points sound obvious and simple, which they are, but it’s amazing
how frequently it’s not done.
All
software you need should be deployed. Don’t rely on any software
being present on a host! Don’t rely on someone else to put it there
for you! It's worth listing what you rely on so later you can create
them all as Vamos applications.
All
applications should be good citizens. Applications should be able to
run alongside any other application with no conflict. It shouldn’t
need a dedicated user to run.
The
scripts used to start and stop your application should be shipped
with your application. No ‘support’ scripts should be held
locally. They should all be held with your source code and deployed in the same manner.
Make
sure when your application is running on a host that it is easily
identifiable from the process list. Makes support much easier.
Select
a standard area for placing the logs of your application. This should
be agreed so all applications supported by one team use a standard
directory layout. Make the log filename unique so you can identify
the instance running.
Use
a dedicated scheduler to start and stop your application using the
scripts you deploy. It should be the only tool that does this in a
production environment. The schedule needs to be tested before it’s
used in production!
Keep all your environments clean. There no excuse for untidiness. Have an automated job that zips old logfiles and delete them after a configurable number of days. Remove all old core files. Only keep files on your system that you need - put the rest in the trash.
Keep all your environments clean. There no excuse for untidiness. Have an automated job that zips old logfiles and delete them after a configurable number of days. Remove all old core files. Only keep files on your system that you need - put the rest in the trash.
Application
configuration:
A
simple approach that works well in most cases is to categorise your
properties into:
- Properties that need to change for each environment: Add these properties to a grid. Then use Vamos templatisation to inject them into property files for your application to read.
- Properties that change across all runtime environments: These can be added to property files and deployed with your application. A code change will be needed to change them.
- Properties that need to be secret: A common way is to use UNIX permissions to secure a password file owned by the runtime user. We prefer to use RSA to secure passwords. Anyone with the public key can encrypt but only those with the private can decrypt.
Do
not have property files that are stored in an environment and changed
locally. This is a recipe for disaster!
Finally...
Now
that we have made you aware of some preparation steps we can move
onto how to use Vamos Deploy. Starting with the next entry.
No comments:
Post a Comment