Roadmap: How to Adopt
This roadmap describes how to adopt this practice.

Overview

Deployment automation helps drive faster feedback to developers and minimize the risk of errors during production releases. When rolling out deployment automation, start with quick wins in lower environments while keeping an eye on eventual use in production. 

Choosing the right Applications to Automate

Most rollouts will start with a handful of pilot applications. Through the automation and early use of deployment automation, the rollout team can understand what works and what doesn’t early in the process.
 
An ideal application will meet many of the following criteria:

  • Development will be active: Changes will be occurring in the application with enough frequency to drive and exploit frequent use of deployment automation.
  • Technology stack is “normal”: Ideally, your early applications will be representative of many of your other applications. This way, your pilot work can be leveraged towards rapid rollout of similar apps.
  • Deployment process is understood: Eventually, you will have to figure out how to deploy applications whose processes are poorly documented and understood. For a quick win, start with one that is more known.
  • The team is eager: Often when word of a deployment automation project gets out, some teams volunteer to go first. Those are good candidates as they are more likely to provide experts to help out.

Start with the Production Deployment Process in Dev Test

Frequent deployments to test environments not only facilitate the testing of the code, but they should also test the deployment process itself. For that to be meaningful, any automation that is created should be designed with production deployment in mind. Deployments to a development test environment or early QA environment are generally simplified versions of a production deployment. Conversely, a production deployment is generally not the same as a development deployment applied to more servers. There may be load balancers, additional middleware, third party content providers and more than need to be considered. 

  • Initial deployments in early test environments: Run your initial deployments in early test environments to test the process. Begin deploying to production servers once you have gained confidence.
  • Virtualize missing components: Parts of your application that are not present in lower testing environments are good candidates for Service Virtualization (link to practice) to support early integration testing.
  • Easy Components First: Often it makes sense to start with web application and content tiers of applications. Then expand to BI tools, Mobile and Mainframe.
  • Use Manual Steps to include un-automated components: To orchestrate changes across manual and automated components, use a manual step in place of the automation for components you haven’t got to.
  • Avoid automating bad practices: An automation effort is an ideal time to evaluate your deployment processes and make changes. Scale Configuration with Templates.
  • Version control automation: Establish a change control system for the configuration of automated deployment configurations, processes, environments and resources.

Expanding your roll-out

  • Configuration with Templates: As you become comfortable with pilot applications, convert components that are similar to others in the organization into component templates. See Component Templates in IBM UrbanCode Deploy v6.0.
  • Incorporate remediation: If there common failure points in some of your deployments such as an application server that won’t shut down, consider having frequently failing steps automatically trigger remediation steps.
  • Trigger testing at the end of a deployment: When deployments complete, initiate the appropriate testing for the environment. Look to the Switch utility step to help map environment to test type.

Pitfalls to avoid

Beginning with how the developers deploy: As mentioned above, use the desired production deployment process as the baseline. Developers may use short cuts like dropping the database and recreating it from scratch as part of the deployment. That won’t work in production against important, live data. Instead an incremental update is needed. By starting with the production process, you will build your process in a way that can be used across environments from the start.
 
Failing to engage Development, QA, and Release Management: Deployment automation serves many constituencies. Understanding the needs of all these groups is critical to building a solution that will be used rather than circumvented or duplicated.