# About the project

This is the documentation for and end to end CICD pipeline for a Java Spring Boot application using Jenkins as the Continuous Integration (CI) tool and Argo CD as the Continuous Deployment (CD) tool to deploy the application on a Kubernetes cluster.&#x20;

The following steps are involved in this pipeline:

* When an user pushes any code changes to the github repository, a GitHub webhook is triggered automatically which will start the build process in Jenkins ensuring that the pipeline remains responsive to any updates
* Upon receiving the trigger, Jenkins will clone the code from the repository and use Maven to build an archive of the application
* To maintain code quality and security, static code analysis is performed using SonarQube. It checks for any code vulnerabilities and ensuring that the application's codebase is clean and secure
* Using Docker, the maven archive is transformed into a Docker image and it is pushed to DockerHub where the image is tagged, thereby ensuring the versioning process
* The image with the tag is updated in the deployment manifests repository for the application using shell scripts so that Argo CD will pick up the latest changes and deploy the updated application to the Kubernetes cluster
* ArgoCD will continuously monitor the manifests repository which contains the deployment and service manifests for the application. Whenever changes are detected, ArgoCD takes care of deploying the latest application to the Kubernetes cluster. This process aligns perfectly with the GitOps approach, where the desired state of the application and infrastructure is defined in Git

<figure><img src="https://3157512683-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FSdKCeOdDbFafu1TTNFV5%2Fuploads%2FGi3LcuJc1OlxrldOKH2A%2Fdiagram-export-21-1-2024-4_56_37-pm.png?alt=media&#x26;token=a93dd95c-c3e6-489e-9a8a-a3a8e6b71353" alt=""><figcaption></figcaption></figure>
