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)

DevOps Patterns for Cloud-Native Architecture

Both DevOps culture and the cloud-native architecture complement each other in their contribution to bring about a change in software development and in making companies successful. While DevOps focuses on collaboration and the fast delivery of applications, the cloud offers scalability and automation tools to deliver applications to customers. In this section, we will discuss how the DevOps culture and cloud-native architecture work in sync and can be practically implemented.

DevOps attempts to eliminate time and resource wastage in software development by increasing automation and collaboration. Cloud-native application development focuses on building and running applications that utilize the advantages of cloud services. When they melt in the same pot, the cloud-native architecture and cloud‑cloud computing enable and adopt DevOps culture in two main directions:

  • Platform: Cloud-computing provides all platform requirements for DevOps processes such as testing, development, and production. This enables organizations to smoothly run every step of the DevOps toolchain on cloud platforms. For instance, verification, release, and production stages of the DevOps toolchain can be easily placed on separate Kubernetes namespaces in GCP with complete isolation.

  • Tooling: The DevOps culture focuses on automation, and it needs reliable and scalable tooling for continuous integration, deployment, and delivery. To exploit the scalability and reliability that's provided by cloud platforms, these tools inevitably have to be cloud-native. For instance, AWS Code build, which is a continuous code build tool by AWS, is widely used for a reliable, managed, and secure method of testing and integrating applications.

Not only solo DevOps or cloud-native applications, but also their combination has changed software development. In the following table, fundamental changes are briefly summarized:

Figure 1.3: Differences between Pre-DevOps and DevOps approaches

Today, and presumably in the future, organizations would not only deliver software but also provide services. Similar to the Software-as-a-Service (SaaS) products of today, the approach will be more mainstream, and microservices-as-a-service products will spread throughout the market. To deliver and manage cloud-native services of the future, you will need to implement DevOps practices. The most critical cloud-native DevOps practices are continuous integration and continuous delivery/deployment. Each of these will be briefly discussed as follows:

  • Continuous Integration (CI): This practice concentrates on integrating the code several times a day, or more commonly, with every commit. With every commit, a hierarchy of tests are run, starting from unit tests to integration tests. Also, software executables are built to check inconsistencies between libraries or dependencies. With validation provided by the test and build results, success or failures indicate whether the codebase works. Tests and builds of the CI could run on on-premise systems or cloud providers. CI systems are expected to be always up and running and be on the lookout for the future commits from developers.

  • Continuous Delivery (CD): CD is an extension of CI to automatically deliver or deploy packages that have been validated by CI. CD focuses on creating and publishing software packages and Docker containers in the cloud-native world automatically with every commit. CD focuses on updating applications on the customer side or public clouds with the latest packages automatically. In this book, both continuous delivery and deployment topics are covered and abbreviated as CD.

In the next section, we will explore the essential characteristics of CI/CD tools in order to help you choose the right subset for your organization.