Jenkins Pipeline for Java based application using Maven, SonarQube, Argo CD and Kubernetes
Tags: devops, kubernetes, docker, jenkins
Published: 2023-10-08 17:17:06

End-to-end CI/CD with Jenkins and GitHub integration, deployment of a Java base application on an AWS EC2 instance, and exploration of Minikube for Kubernetes deployment! 🎉 🔧 **Tools and technologies used**: AWS created an Ubuntu AWS-EC2 instance; Jenkins and Docker were installed on the Ubuntu EC2 instance; and a secure connection was established between Jenkins and GitHub using an SSH key produced on EC2.Jenkins produces Docker images from the GitHub-hosted Dockerfile and runs containers * The image was then submitted to Docker Hub, preparing it for Kubernetes Minikube was used to deploy the application also using Argo CD.

This project showed me the power of automation, CI/CD, containerization, Argo CD, and Kubernetes orchestration, as well as allowing me to improve my DevOps skills. It's incredible to watch how different technologies work together to improve development and deployment procedures. I'd want to thank the fantastic DevOps community on YouTube for their constant support in assisting me in transitioning from fundamental knowledge to hands-on expertise, as well as my amazing tutor Abhishek Veeramalla. 🚀 Your suggestions and collaborative spirit have been invaluable! I'm eternally grateful to all of the incredible content authors that diligently share their expertise and experiences, paving the path for other DevOps enthusiasts like me to prosper in the world.@Abhishekveeram deserves special recognition.

Prerequisites:

1. Java application code hosted on a Git repository
2. Jenkins server
3. Kubernetes cluster
4. Argo CD


Steps:

```
1. Install the necessary Jenkins plugins:
   1.1 Git plugin
   1.2 Maven Integration plugin
   1.3 Pipeline plugin
   1.4 Kubernetes Continuous Deploy plugin

2. Create a new Jenkins pipeline:
   2.1 In Jenkins, create a new pipeline job and configure it with the Git repository URL for the Java application.
   2.2 Add a Jenkinsfile to the Git repository to define the pipeline stages.

3. Define the pipeline stages:
    Stage 1: Checkout the source code from Git.
    Stage 2: Build the Java application using Maven.
    Stage 3: Run unit tests using JUnit and Mockito.
    Stage 4: Run SonarQube analysis to check the code quality.
    Stage 5: Package the application into a JAR file.
    Stage 6: Run user acceptance tests on the deployed application.
    Stage 7: Promote the application to a production environment using Argo CD.

4. Configure Jenkins pipeline stages:
    Stage 1: Use the Git plugin to check out the source code from the Git repository.
    Stage 2: Use the Maven Integration plugin to build the Java application.
    Stage 3: Use the JUnit and Mockito plugins to run unit tests.
    Stage 4: Use the SonarQube plugin to analyze the code quality of the Java application.
    Stage 5: Use the Maven Integration plugin to package the application into a JAR file.
    Stage 6: Use the Kubernetes Continuous Deploy plugin to deploy the application to a test environment using Helm.
    Stage 7: Use a testing framework like Selenium to run user acceptance tests on the deployed application.
    Stage 8: Use Argo CD to promote the application to a production environment.

5. Set up Argo CD:
    Install Argo CD on the Kubernetes cluster.
    Set up a Git repository for Argo CD to track the changes in the Helm charts and Kubernetes manifests.
    Create a Helm chart for the Java application that includes the Kubernetes manifests and Helm values.
    Add the Helm chart to the Git repository that Argo CD is tracking.

6. Configure Jenkins pipeline to integrate with Argo CD:
   6.1 Add the Argo CD API token to Jenkins credentials.
   6.2 Update the Jenkins pipeline to include the Argo CD deployment stage.

7. Run the Jenkins pipeline:
   7.1 Trigger the Jenkins pipeline to start the CI/CD process for the Java application.
   7.2 Monitor the pipeline stages and fix any issues that arise.
```

This end-to-end Jenkins pipeline will automate the entire CI/CD process for a Java application, from code checkout to production deployment, using popular tools like SonarQube, Argo CD, and Kubernetes.





![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uwr95ofhmzfs4mpsll9j.png)










![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7tib1od2z3w7mqoajosj.png)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sx8f2cdyzyw51bd2srta.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r6mdfu4hbtmhw9081bp8.png)







[Youtube](https://youtu.be/JGQI5pkK82w?si=o8pbky6ri_IR821X)
🚀💡 
[Git](https://github.com/SwapnilM24/Jenkins_YOUSM/tree/main/java-maven-sonar-argocd-helm-k8s)
🚀💡 
[linkedin](www.linkedin.com/in/swapnil-mohite-☁-278848171)