The journey from application lifecycle management (ALM) to IT infrastructure library/IT service management (ITIL/ITSM) can be a mysterious and challenging transition. ALM usually puts the spotlight on rapid iterative development while the operations wizards use their capabilities to keep essential business services running twenty four hours a day, seven days a week—along with managing changes, often at a very rapid pace. In fact, many technology professionals thrive on creating complex applications while secretly dreading the dangerous realm of large-scale application deployments—generally resigning themselves to giving up yet another weekend. Many successful organizations are rising to this challenge and embracing zero-touch deployments. This article will help you get started on your way to implementing completely automated release and deployment.
Zero-touch Deployments—Myth or Reality?
The target goal of implementing fully automated, (i.e., zero-touch) deployments may seem like a wish that can never be fulfilled. ITIL has also been criticized for being an elusive ivory tower and idealistic framework. Deployments are complicated with many moving parts and changing requirements. In the real world, deployments are often very difficult to fully automate. Having been burned by painful deployments, many technology professionals surrender to the notion that deployments are always painful and don't even consider how they might be able to engineer their systems to be more deployment friendly. Dare we even consider the possibility that applications can be engineered to deploy smoothly in what some veterans are now calling zero-touch deployment?
Checklists Are Essential
You gotta start somewhere, and a pragmatic first step is to document on paper each step, even if only at first. While checklists are essential, they also provide the motivation for putting a full court press on automation. So checklists may be essential, but scripting and automating the build, package, and deploy is an absolute requirement.
What About Ant, Maven, and Make?
Experienced technology professionals are aware of the value of automating the build using tools like Ant, Maven, or Make. These tools are great and have withstood the test of time. Developers and build engineers use build tools to create reliable scripts to compile and package applications. Some scripts get pretty elaborate and others are elegantly simple. Whether you decide to dive into the complexities of the Maven build lifecycle supported by a repository manager or just whip together some Ant scripts, your journey to release automation needs to include these old friends.
Components and Builds
It is always wise to create your build automation in components. You might have one script that retrieves the code from the version control system (VCS) and another script for creating classes and jars, followed by configuring the packaged release for a specific environment (e.g., QA, UAT, or production). The first time that you have to switch from one VCS to another, you will realize that it is always best to break this effort into chunks, which also helps to reduce complexity and make maintenance much easier. Using components is a true best practice, although you should also plan on connecting the different components together.
Scripting the Essential Pieces Together
After you have each component working independently, you will want to be able to run the entire batch (sometimes called a job stream). This component-based approach has an additional benefit of allowing you to approach your effort in an iterative and agile way. You can quickly create a script to automate a specific piece of this effort and create scripts to run each step as part of a comprehensive and coordinated job stream. Obviously, this also makes it much easier to support and maintain each piece that is structured as a discrete step