A new approach to continuous integration and continuous delivery (CI/CD) is emerging for cloud native architectures. Cloud native CI/CD requires a deeper understanding of DevOps practices and how that affects the way organizations deploy and manage workloads using containers, microservices and serverless functions. An increasing focus on continuous delivery (CD) has brought new tools and practices that allow teams to produce frequent, fast and, above all, boring automated releases.
With cloud native architectures, complexity is shifting away from building and assembly of code towards orchestration of releases. Build tools such as Travis CI and Jenkins are starting to commoditize and become much simpler. As more and more organizations get comfortable with building custom code using containers and other immutable constructs, they spend fewer cycles on building that code and shift into solving the problems of orchestrated releases.
Focusing on software releases is a cultural shift for companies that involves organizational change. DevOps transformation means building cross-functional teams with common goals, aligning the organization around the architecture and creating a culture of continuous improvement. One of the higher-level achievements in a DevOps transformation is continuous delivery.
“Continuous delivery is the natural extension of continuous integration, an approach in which teams ensure that every change to the system is releasable, and release any version with the push of a button. Continuous delivery aims to make releases boring, so that we can deliver frequently and get quick feedback on what users care about.”
CI is a mechanism to merge and test code changes on an ongoing basis, often achieved by a tool like Jenkins. CD is the attempt to speed up and automate deployments, where an operator can push out multiple deployments in a week across numerous services, and know the exact condition of the applications and infrastructure in the course of the deployments.
What is truly required for continuous delivery which is not provided by CI tools is a “state” machine. CD tools, such as Spinnaker, have the ability to take an environment from one state to the next until it makes it all the way to production. The machine will move the environment, such as Docker containers, through to production in an automated fashion, and will even have the ability to do things like rollbacks, canary deployments and scaling instances. This allows for the agile, push button, automated deployments that an ideal CD mindset drives towards. Such pipelines are at the core of CD capabilities, by orchestrating a repeatable deployment over stages.
Underlying these new CI/CD pipelines is Kubernetes, the open source container orchestrator. Its modularity, available tooling and immutable infrastructure make CD much easier to put in place. Kubernetes helps define a container deployment and manage instances, but leaves it up to the user to automate those deployments into environments.