Continuous Delivery
What Is Continuous Delivery?
Continuous delivery (CD) is an application development practice that involves automatically preparing code changes for release to a production environment. Combined with continuous integration (CI), continuous delivery is a key aspect of modern software development. Together, these two practices are known as CI/CD.
Properly implemented CI enables developers to deploy any code change to testing and production environments late in the software development lifecycle (SDLC). Developers can thus rely on build artifacts that have passed standardized test processes and are ready for deployment.
With continuous delivery, developers can automate various tests (not just unit testing) to verify multiple aspects of software updates before releasing them to the customer. Automated tests might include API testing, load testing, functional and UI testing, integration testing, and so on. These tests help developers assess updates more thoroughly and identify issues before deploying a release to production.
In a cloud-based deployment, developers can easily and cost-effectively create and replicate multiple testing environments. When working on premises, dynamically creating test environments was traditionally more difficult. Kubernetes is helping organizations effectively automate CI/CD processes across clusters of nodes, both in on-premise data centers and in the public cloud.
Why Continuous Delivery?
Continuous delivery has several advantages over traditional waterfall-style development:
- Simpler releases—development teams spend less time preparing codebases for release and don’t combine multiple changes into a large, complex release. Instead, developers update and release code in small increments—ideally, every time they make a change.
- Easier maintenance—minor releases quickly reveal bugs in new code. When software is frequently deployed to production, it is easy to identify production issues, isolate a recent change that caused the issue, fix it, test and redeploy.
- Improved development velocity—in a continuous delivery environment, developers can iterate on software rapidly and deliver value to customers faster. New features can be accessed by customers much more quickly, and when customers have new requirements, development teams can rapidly respond to them.
- Improved quality—continuous delivery makes releases more predictable, more reliable, and of higher quality. CD does not prevent bugs, but can catch them earlier in the development lifecycle and reduce their impact on customers.
- Less downtime – removal of manual steps minimized the amount of human errors
What’s the Difference Between Continuous Delivery and Continuous Deployment?
Continuous delivery and continuous deployment are closely related concepts, indicating two levels of automation in a software development strategy.
Continuous delivery emphasizes automation that minimizes the manual effort required to deploy code changes. In a continuous delivery pipeline, developers create their code, it passes automated tests, and is then automatically integrated with a repository like a container registry or a binary repository. The operations teams can then deploy the code to the live production environment at the push of a button.
Continuous deployment emphasizes reducing the burden on operations teams to accelerate the application delivery process, expanding continuous delivery automation into the next SDLC stage. It typically includes automation of additional steps in releasing new software to minimize the manual processes required. For example, a continuous deployment pipeline may automatically release the development team’s changes from the repository to the production environment, where customers can use it. Continuous deployment is harder to achieve than Continuous Delivery as it automatically sends approved artifacts to production environments without any manual intervention.
What Is the Continuous Delivery Pipeline?
The continuous delivery pipeline has five primary phases:
- Develop—a developer writes code with new or updated software functionality.
- Commit—the developer commits the code to a version control system.
- Test—the change undergoes multiple automated tests.
- Stage—the change is deployed to a realistic environment for final testing.
- Deploy—the change is deployed to a production environment.
The main identifying criterion of a true CD pipeline is that software can be deployed throughout its entire lifecycle. Any change to the software can be deployed to a testing or staging environment at the click of a button. Development teams receive fast feedback from automated tests, staging environments, and production environments, and can use this feedback to drive additional improvements.
Adopting GitOps for Continuous Delivery
The primary way to put GitOps into practice is pull-based deployment. In a traditional CI/CD pipeline, new code pushed to the application repository triggers deployment—in other words, it relies on an external event to trigger an action. By contrast, the pull-based method updates the application by frequently comparing the actual state of live infrastructure to the desired state specified in the environment repository. In Kubernetes, this is achieved by a GitOps controller that detects a discrepancy between the actual and desired states. Upon any discrepancy, it updates the infrastructure to match the environment repository. It might also check the image registry for new image versions to deploy.
Pull based deployment can thus reverse any change to the infrastructure that is not documented in the environment repository, maintaining the traceability of all changes in the Git log and preventing direct cluster changes that may cause state deviations.
Comments
Post a Comment