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 Culture


Software development organizations traditionally worked in a fast-paced environment without focusing on inter-team collaboration. Development teams attempted to produce software as soon as possible for deployment by the operations team. Without clear communication between development and operations, conflicts and product failures were inevitable. When organizations examined the problems in depth, they realized that development teams had almost no idea about the runtime environment. The operations team had practically no sound understanding of the requirements and features of the applications they were deploying. With enormous barriers between these teams, organizations created applications that did not simultaneously account for the runtime environment and software requirements. Consequently, neither development nor operations teams were held responsible for many problems and attempted to address several customer tickets, thus leading to the loss of many engineer hours and money.

DevOps—derived from Development Operations — culture came in to being to increase collaboration between development and operations. Organizations built DevOps teams with engineers from development and operations backgrounds to eliminate the communication barrier between these groups. Besides, many practices and tools are implemented to increase automation and decrease the delivery times, and minimize the risks. Eventually, this culture shift in organizations fostered quality and reliability with reduced lead times. In these new teams, developers acknowledged operational knowledge such as cloud providers and customer environments.

Operations engineers also gained insight into the applications that they were deploying. Enhanced overall efficiency and advances in cloud-native architectures increased the adoption of DevOps culture in various level of organizations, from start-ups to enterprise companies.

Note

Although the term DevOps is used in various meanings, job postings, and company culture manifestos, there is not still one accepted academic or practical definition. The DevOps term was coined by Patrick Debois in 2009 and first used in the DevOpsDays Conference that started in Belgium.

To summarize, we first described the issues encountered in the conventional method of software development. We discussed how DevOps increases collaboration and mitigates problems that are encountered in conventional approaches for software development. In the next section, we will discuss the best practices for implementing DevOps.

DevOps Practices

Organizations adopt unique methods to implement DevOps. Thus, there are no specific standards in terms of implementation practices. In other words, it is difficult to find a single approach with regard to implementing a DevOps culture shift when considering unique product requirements and organizational structures. However, there are certain core best practices that have been implemented in the industry by successful companies. The following ideas cover the core the DevOps philosophy:

  • Continuous Integration (CI): Continuous integration focuses on integrating changes from different sources as soon as possible. Integration covers building, reviewing code quality, and testing. The main idea of CI is finding bugs and conflicts as quickly as possible and solving them early in the software life cycle.

  • Continuous Delivery (CD): Continuous delivery focuses on delivering and packaging the software under test as soon as possible. Similar to CI, CD aims to create production-ready packages and deploy them to the production environment. With this idea, all changes will be in the service of customers, and developers will be able to see their recent commits live.

  • Monitoring and logging: Monitoring metrics and collecting application logs is critical for investigating the causes of problems. Creating notifications over parameters and active control of systems help to create a reliable environment for end users. One of the most crucial points is that monitoring could create a proactive path for finding problems rather than waiting for customers to encounter issues and raise tickets.

  • Communication and collaboration: The communication and collaboration of different stakeholders is crucial to success in DevOps. All tools, procedures, and organizational changes should be implemented to increase communication and cooperation. Knowledge and information sharing with open communication channels between teams enables transparency and leads to successful organizations.

Until now, we have discussed the best practices to implement the DevOps approach. In the next section, we will describe how the DevOps tools chain in conjunction with the aforementioned best practices lead to the creation of a value chain.

DevOps Toolchain

The DevOps toolchain enlists practices that connect development and operations teams with the aim of creating a value chain. The main stages of the chain, along with their interconnectivity, are presented as follows:

Figure 1.1: The DevOps toolchain

The inputs and outputs of each stage are presented in the following flow chart:

Figure 1.2: Detailed steps of the DevOps toolchain

When a new project is on the table, the chain originates from planning and then progresses to creating the software. The next steps are verification and packaging. Completion of packaging marks the end of the development phase. Thereafter, operations begin from release, followed by configuration. Any feedback and insights obtained at the end of monitoring feed in to the development phase again, thereby completing the cycle. It is important not to skip any part of the toolchain and create an environment where processes feed each other with complete data. For instance, if monitoring fails to provide accurate information about the production environment, development may not have any idea about the outages in production. The development team will be under the false impression that their application is running and scaling with customer demand. However, if the monitoring feeds planning with accurate information, development teams could plan and fix their problems in scaling. As DevOps tries to remove the barriers between development and operations, meticulous execution of each stage in the DevOps tool chain is crucial. The most natural and expected benefits of DevOps can be summarized as follows:

  • Speed: The DevOps model and its continuous delivery principles decrease the time to deliver new features to the market.

  • Reliability: Continuous integration and testing throughout the product's life cycle helps to increase reliability of products. With metrics collected by monitoring systems, applications evolve to be more stable and reliable.

  • Scalability: Not only software but also infrastructure is managed as code in the DevOps environment. This approach makes it easier to manage, deploy, and scale with customer demand.

DevOps culture, with its best practices and toolchains, provides many benefits to organizations. However, before implementation, understanding the current company's culture and creating a feasible action plan for introducing DevOps is crucial. In the following sections, how DevOps practices are implemented for applications and introduction to cloud-native architecture is explained in more detail.