Book Image

Cloud-Native Continuous Integration and Delivery

By : Onur Yılmaz
Book Image

Cloud-Native Continuous Integration and Delivery

By: Onur Yılmaz

Overview of this book

<p>Cloud-native software development is based on developing distributed applications focusing on speed, stability, and high availability. With this paradigm shift, software development has changed substantially and converted into a more agile environment where distributed teams develop distributed applications. In addition, the environment where the software is built, tested and deployed has changed from bare-metal servers to cloud systems. In this course, the new concepts of cloud-native Continuous Integration and Delivery are discussed in depth. Cloud-native tooling and services such as cloud providers (AWS, Google Cloud) containerization with Docker, container-orchestrators such as Kubernetes will be a part of this course to teach how to analyze and design modern software delivery pipelines.</p>
Table of Contents (6 chapters)

Introduction to Cloud-Native CI/CD Concepts

In the past few years, there have been several paradigm shifts in software development and operations. This has presented the industry with innovative methods for creating and installing applications. More importantly, two significant paradigm shifts have consolidated their capabilities for developing, installing, and managing scalable applications: DevOps and the cloud-native architecture. DevOps introduced a culture shift that increased focus on having smaller teams with agile development instead of large groups and long development cycles. Cloud-native microservices emerged with cloud-based horizontal scaling ability, thus providing service to millions of customers. With these two significant, powerful approaches combined, organizations now have the capability to create scalable, robust, and reliable applications with a high level of collaboration and information sharing among small teams. Before we begin expanding on DevOps and the cloud-native architecture, we will explore the limitations posed by conventional software development and how it compares with new approaches.

Conventional software development can be likened to manufacturing a passenger aircraft. The end product is enormous and requires considerable resources, such as a large infrastructure, capital, and personnel, to name a few. Requirement collections and planning are rigid and usually take weeks to months to be finalized. Similar to this example, in the conventional development cycle, different parts of the software are always combined in the same product line that is specifically built for a monolithic bulky end product. Once developed, the product is finally delivered to customers. Note that there is very little flexibility presented to the customers in terms of how they wish to use the product's features or in terms of dynamically altering them as per market fluctuations.

Nowadays, software development can be likened to manufacturing drones. The goal is to have leaner end products that can be mass produced and distributed. Unlike bulky software, today, software is distributed as microservices and built with relatively smaller and sometimes even geographically distributed teams. Requirements collection and planning are more flexible, and it is possible to let customers decide how to use these services and configure them on the fly. In addition to maintenance, managing and updating the software-as-a-service is included in the life cycle. This revolution in software development is possible due to new cloud-based architectural approaches and DevOps related cultural changes in organizations.

It is challenging to develop and run the scalable cloud-native applications with tools and the mindset of conventional software development. Unlike large software packages that are delivered in disk drives and other storage devices, current implementations are designed as microservices and packaged as containers that are available via cloud systems. These containers run in clusters that are managed by cloud providers such as Amazon Web Services (AWS) or Google Cloud Platform (GCP). Thus, organizations do not have to invest in costly servers or bother about having them run in-house. To develop, test, and run cloud-native applications, two essential DevOps practices must be implemented in a cloud-native manner: continuous integration (CI) and continuous delivery/deployment (CD).

Creating CI pipelines to test microservices and create containers is the first prerequisite of cloud-native application development. CD is based on delivering applications for customer usage and deploying them for production. With best practices, checklists, and real-life examples of cloud-native CI/CD pipelines, organizations can now bridge the gap between developers and customers efficiently and create reliable, robust, and scalable applications.

This chapter explores the impetus for the shift toward a DevOps culture and its impact on software development. Next, cloud-native architecture and essential characteristics of the applications of the future are listed. The chapter also explains how cloud-native architecture compliments DevOps and contributes toward successful organizations. DevOps practices for cloud-native architecture, namely CI and CD, are described, and guidelines are provided for selecting the appropriate tools.