Continuous delivery and continuous deployment are two core concepts at the foundation of modern software development practices and the broader DevOps movement. These methods greatly boost the speed and efficiency of software development – which is greatly needed in today's cloud computing era.
The so-called Waterfall method of development, where developers work for months building code that is eventually ready for release doesn't work in the modern world, where Software-as-a-Service (SaaS) is the norm. Instead, agile methods of rapid code iteration – focusing on continuous development and deployment – is the approach favored by modern application development.
What is Continuous Delivery?
Continuous delivery is an incremental approach to application and feature development. Rather than one large delivery of code when a large project is completed, developers regularly push new code from their development environments.
With Continuous delivery, new code from developers is continuously delivered into a production staging environment where testing, conformance and quality assurance teams and tools perform additional validation. The final push to production deployment in an continuous delivery pipeline is not automatic.
What is Continuous Deployment?
Continuous deployment is an agile, DevOps approach for rapidly iterated new code. With a Continuous Deployment model, code from developer tools and environments is migrated on a regular basis upstream into the deployment process.
The continuous deployment model does not involve any code gating or additional staging prior to deployment. Rather, as the term implies, code is continuous deployed from developers into operations (the 'Ops' in DevOps). Continuous Deployment is reliant on Continuous Integration as part of the development process.
Understanding Continuous Integration
In modern application development, there are often multiple distributed teams working on different features and components.
With continuous integration, code from the different development teams are pushed into an integration workflow. Within the continuous integration workflow, different types of testing typically occurs to ensure code quality and security.
At the end of a continuous integration workflow is often a tightly coupled continuous delivery or deployment process, which is commonly referred to as the CI/CD (continuous integration/continuous deployment/delivery).
Continuous Delivery vs. Continuous Deployment
Continuous delivery and continuous deployment are two very closely related terms and are sometimes used interchangeably by vendors and even developers. The two terms, however, are not synonyms for each other and are subtly different.
Simply put, continuous deployment integrates a fully automatic deployment methodology for production, which the continuous delivery method makes use of a manual deployment trigger for production.
Continuous delivery and continuous deployment often work in tandem to speed the process of software development.
DevOps and Continuous Delivery and Deployment
CI/CD, with its core component of continuous delivery/continuous deployment, is a primary element for enabling DevOps.
With DevOps, rather than development being a set of activities that are separated from production operations, development and operations are melded together into an integrated workflow. The ability to take code from development and integrate with operations is enabled with CI/CD systems.
Continuous delivery and continuous deployment integrate DevOps best practices by streamlining code testing and deployment into a repeatable workfow that makes software development much faster than a legacy waterfall approach.
Benefits of DevOps CI/CD Workflows:
- Agile Development. The DevOps method promotes an agile development process where code moves into production on a regular and continuous basis.
- Incremental Innovation. Rather than waiting for all features to be completed, the continuous delivery and continuous deployment approaches enables new innovation to be built rapidly on their own.
- Enhanced Code Stability. Testing is an integrated component of the continuous delivery/continuous deployment workflow, which can help to identify regressions and stability bugs.
- Improved Security. Part of the CI/CD pipeline can include static analysis code testing to help identify coding errors and defects.
Managing the Deployment Pipeline
CI/CD, continuous delivery and continuous deployment DevOps methodologies require strong management and well-defined process to be successful. Among the key components that are needed to manage the deployment pipeline are:
- Documentation. Being able to define and document each step of a deployment pipeline avoids ad hoc processes and helps to ensure a repeatable process.
- Testing Coverage. Testing is a cornerstone of making sure deployment works. It's critical to have the right types of performance, stability testing tools in the pipeline to ensure code quality.
- Rollback Capabilities. Mistake happen and given the rapid release cycle that CI/CD enables, it's important to have integrated rollback capabilities in the workload, to minimize risk.
- Automation Tools. Speed is the name of the game for CI/CD and that speed can't be enabled with manual entry and humans needed for every interaction.
CI/CD Tools and Resources
The continuous delivery/continuous deployment landscape itself has been in a state of continuous evolution over the last few years. The year 2019 has been a landmark year for Continuous Delivery Foundation (CDF) with the launch of the open source Continuous Delivery Foundation, by the Linux Foundation.
CDF brings together the leading open source continuous delivery technologies in use today, including:
Jenkins - An automation server enabling a full CI/CD pipeline. Jenkins benefits from enterprise grade support and services from its primary sponsor, Cloudbees.
Spinnaker - A continous delivery platform created by Netflix and further developed in the open with Google.
Other popular CI/CD tools include:
Atlassian Bamboo - commercial tool that provides automated build test and release capabilities.
Codeship - Continuous integration platform that hooks into GitHub enabling rapid deployment.
Shippable - Continuous delivery platform with a focus on security and continuous improvement.