[comment]: # (mdslides presentation.md --include media) [comment]: # (The list of themes is at https://revealjs.com/themes/) [comment]: # (The list of code themes is at https://highlightjs.org/) [comment]: # (markdown: { smartypants: true }) # Continuous Integration and Continuous Deployment
### Today's agenda - What is CI/CD - Software delivery before CI/CD - CI and CD decomposed
### The bad old days
👨💻
Developers are coding their new features
### The bad old days
👨💻         👩🏾💻
When done, their work is delivered to operations team ➡️
### The bad old days
👩🏾💻
Operations combine all code changes together into a new **Version** This process is known as **Build**
### The bad old days
🧐
Testing teams are manually or automatically testing the new version
### The bad old days
👩🏾💻
Operations team deploy the new version in an end-environment (either development or production environment)
### The bad old days
🕒
This process takes time... Thus: - The deployment is infrequent - Large - Done much after the code was developed or tested - **Production can be easily broken** 😵
### The bad old days
👨💼
What product managers **without** DevOps in mind do? 🤔 Ask the teams to **deploy it less** and **test it more**!
### The bad old days
👨💼
Product managers **with** DevOps in mind say: **deploy it more** and **test it less**! - Deploy small parts of changes more frequently (sometime multiple times a **day**) - Since new versions contain only small changes (comparing to the previous deployed version), it's easy to test it with high confidence
### CI/CD CI/CD is a set of practices and tools used in software development to automate and streamline the process of building, testing, and deploying software.
### Continuous Integration (CI) **Continuous Integration (CI)** is the practice of frequently and automatically integrating code changes into a new app version, ready to be deployed anytime.
▶️ Commit & Push ▶️ Pre-build test ▶️ Build a version ▶️ Store build artifacts 🏁
### Continuous Integration (CI) ▶️ Commit & Push ▶️ Pre-build test ▶️ Build a version ▶️ Store build artifacts 🏁 - An automated pipeline on **every** new pushed code - Example for pre-build testing: unittests, coding style checks (lint) - Builds are usually create **Build Artifacts** - Artifacts are stored in **Artifact repository** (e.g. Artifactory, Nexus) - Testing and security teams can access artifacts that are candidates to be released in future deployments
### Continuous Deployment (CD) **Continuous Deployment (CD)** focuses on automating the process of deploying a CI version into various environments
▶️ Configure the environment with new version ▶️ Perform rolling update 🏁
### Continuous Deployment (CD) ▶️ Configure the environment with new version ▶️ Perform rolling update 🏁 - Deployment can be done in different environments (e.g. dev, prod, QA, etc...) - Configuring the environment to run the new version depends on the system the app is running on (e.g. Kubernetes cluster, serverless Lambda, etc...) - **Rolling update** is the process of gradually replace the old version instances with the new one, while minimizing **downtime**. - If the deployment to an environment is done automatically, on every code change, we call it **Continuous Deployment**, if manually, we call it **Continuous Delivery**.
### Automation server In order to support CI/CD, we need an **Automation Server**: a server that automates build, test, and deployment processes. There are dozens... e.g. **Jenkins**, **GitHub actions**
# Thanks