DevOps Practices: Continuous Delivery
There are a number of practices that have emerged as central components of the modern software development process; these include continuous integration, continuous delivery, and continuous deployment. These processes are integral to building a successful DevOps environment.
In our continuous integration piece, we discussed the role of the practice within the context of a DevOps environment. Here, we will focus on continuous delivery and the benefits it can provide. We will also discuss continuous deployment and how it relates to continuous delivery.
Defining Continuous Delivery
Continuous integration enables a DevOps environment specifically by encouraging developers to integrate code into a shared control repository, preferably on a daily basis. Another closely aligned DevOps practice is continuous delivery (CD). This practice involves building software in a manner that ensures teams can release changes and fixes at any time – preferably daily – in an automated and controlled manner.
A working group at Thoughtworks developed a number of characteristics that help organizations ensure they are correctly implementing continuous delivery. These characteristics include:
- Your software is deployable throughout its lifecycle;
- Your team prioritizes keeping the software deployable over working on new features;
- Anybody can get fast, automated feedback on the production readiness of their systems any time somebody makes a change to them;
- You can perform push-button deployments of any version of the software to any environment on demand.
Through ensuring the above characteristics, organizations can build a continuous delivery environment that streamlines the software development process and leads to a number of other benefits.
Benefits of Continuous Delivery
Continuous delivery can lead to higher agility, lower risks and costs associated with errors, changes, and releases, as well as improved efficiency and teamwork. Continuous delivery improves agility by enabling organizations to respond to industry forces and other changes. This is because teams are already consistently delivering work through the pipeline, which means that they can make any changes and react as necessary by, for example, adding a new feature that customers are requesting.
Continuous delivery can also reduce risk. For example, a team member can build a continuous delivery structure that only conducts automatic system tests of work that has been approved by the manager of the team. In this case, continuous delivery lowers any of the risks associated with the project because frequent testing and delivery can expose any issues immediately.
In addition, continuous delivery also helps teams improve efficiency and accuracy through automating tests and deployment. Jonathan Fletcher, Enterprise Architect at Hiscox Insurance, found that as a result of such automation Hiscox was able to reduce time per release by 89%, decrease staff time to release by 75%, and reduce the financial cost of a release by 97%.
Automation clearly transforms the way that teams work and, ultimately, improves reliability. According to Fletcher, “with more reliability in your delivery process, you get a faster pace of change.” In other words, organizations are able to be more agile because with continuous delivery, team members can automate these tasks, mitigate the grunt work, and focus on work that provides high business value to the organization instead.
Continuous Delivery vs. Continuous Deployment
Continuous delivery is often confused with another related concept: continuous deployment. As mentioned, continuous delivery refers to building software in a manner that ensures you can release changes and fixes any time in an automated and controlled manner. In this case, teams do not need to deploy every change; however, continuous delivery ensures that the work can be deployed if necessary.
On the other hand, continuous deployment is the next step of the process: deploying the work. In this case, the work that was conducted during the continuous delivery process is automatically deployed into production. Both continuous integration and delivery (CI/CD) are core DevOps practices, however, continuous deployment is often in the shadows because some organizations prefer to not deploy continuously. According to one expert, “while continuous deployment may not be right for every company, continuous delivery is an absolute requirement of DevOps practices.”
Continuous delivery is a core DevOps practice that yields a number of benefits. There are many continuous delivery tools that organizations can leverage ––from Docker and Jenkins to GitHub and JIRA. MuleSoft enables continuous delivery and other core DevOps practices through Anypoint Platform, in conjunction with Maven, MUnit, Jenkins, GitHub, and other popular DevOps tools.
Learn more about continuous delivery tools and why you should create a DevOps pipeline on MuleSoft’s Anypoint Platform.