The software delivery lifecycle consists of the build, deploy, test and release processes. Automating each step supports the eventual goal of successful, mature, functioning DevOps: with continuous integration of software, and continuous delivery of releases.
Continuous delivery means that all changes to code are built, tested, and pushed to the next stage or environment, whether that is testing or staging. When working properly, continuous delivery means that the code base can be deployed safely at any point in time.
Deployment automation is the act of deploying software to a test, or production environment, without the need for additional manual intervention or configuration. It is a critical step in mature DevOps – the automation helps to further streamline processes and improve the software delivery cycle, while acting as a critical support measure for continuous delivery.
DevOps is founded on iterative processes, and automated deployment is one of them. Prior to automating deployment, a DevOps team must define, standardize, and execute a repeatable deployment process, manually. Communication must be prioritized for timely, relevant feedback that can be incorporated to improve processes further.
Deployment automation eliminates wait time, so that software changes can get to a production environment in a fast, reliable fashion. To make it work, a DevOps team should:
- Standardize the process for deploying software to every environment (including testing and production)
- Prepare environments to receive automated deployment without requiring further prep/configuration
- Establish version control to recreate environments should a rollback / disaster recovery be required
- Use the same build artifacts (e.g. code, configurations) across environments to ensure that tested and deployed artifacts are consistent as they are deployed across environments.
Deployment automation supports continuous delivery by improving:
Deployment automation increases the agility of software delivery: improving consistency and frequency of updates and releases. It also reduces lag time, allowing for faster, relevant feedback which can be used to improve future releases.
When deployment is automated, the time spent waiting for a person to complete a task manually is eliminated. Teams become more efficient, and resources can be devoted to applications and services (high-impact endeavors) as opposed to low-impact, manual, repetitive tasks. This serves continuous delivery by freeing resources that can be devoted to improving the DevOps process as a whole.
Reduction in errors, time spent troubleshooting, and outages in both testing and production further streamlines the process, and channels employee efforts to high-level activities.
Deployment automation improves visibility across the software delivery pipeline, so that team members can access a project’s status and know exactly what is deployed in each environment at any time. This helps to further eliminate errors and delays and focus attention on strategic objectives.
An automated deployment process uses the software build artifacts that are created by developers during continuous integration, and workflows that configure the environment, deploy the artifacts, and perform a deployment test. It supports continuous delivery by improving the agility, resource utilization, and transparency of DevOps processes, providing the next step to effective, mature DevOps.