With more and more teams getting ready with practices
like continuous deployment and DevOps, there are lot of questions about the
best practices regarding application deployment. I've been working with
projects and setting up continuous delivery and automated deployments as part
of the work. Below are some of the practices that I follow for application
deployments.
Automate
There is a lot of focus on automation nowadays and a
lot of tools and information is available to automate the manual actions in the
deployment process. Almost every deployment automation tools allows complete
customization and extensibility to make use of scripting languages that are
used to carry out OS specific tasks. This makes it very easy to use these tools
in the process even though you have a specific task to perform that is not
available out-of-the-box in the tool that you are using. For .NET applications
you can use PowerShell for example to do almost anything on windows
environments.
Build once, deploy it many times
For avoiding situations like, "it works in the
Test environment but not in Production". you need to use the same binaries
that were installed and tested on lower environments when deploying to higher
environments. For automated deployments to go risk free, we need to have the
confidence that we are deploying the same package that was tested and approved
from a lower environment. If you are planning to recompile the code base every
time a deployment is happening, there are lot of hidden changes and troubles coming
along with that process, which makes the deployments unstable.
Maintain a repository for the build artifacts
Things can sometimes go wrong and sometimes its needed
to roll-back to a known-working version. Having an artifact repository for your
packages not only will help you in using the same version on every environment,
but also to locate old versions of an application without having to build them
again. Also its a stable version that was working before!!!
Change configuration variables at deployment time not
at build time
One of the common challenges with applications which
migrate through the usual lifecycle of environments such as development, test
and production is getting the configuration context right. Some of the most
common examples are connection strings, trace modes etc. There are multiple
ways to handle this problem with one of them being making use of configuration
file transformations as part of the build process. This can introduce the same
risk as rebuilding binaries for each environment. It’s a good practice to make
use of the deployment tool to apply environment specific configuration changes
during deployment time to the applications. This will allow you to be flexible
with the latest changes in the environments.
Don’t customize the deployment process or steps based
on environments
It’s always good to treat your deployment process the
same across environments. This helps you to create more reliable and
predictable deployments across environments. A lot can go wrong when you try to
make adjustments in the deployment process based on environments. Let’s keep it
simple J
No comments:
Post a Comment