Advanced CI/CD Pipeline with DevOps Tools
medium
ci cd ready
devsecops lab
mvn -q -DskipTests=false test
Use the guide first.
The full learning guide is on this page. Open the repository files only when a step asks you to inspect code, fork the project, or download raw assets.
Project Guide
Section titled “Project Guide”
These are the steps I followed in the implementation of the entire CI/CD Pipeline.
Section titled “These are the steps I followed in the implementation of the entire CI/CD Pipeline.”🛡️ 2026 DevSecOps Enhancements (What You Will Learn)
Section titled “🛡️ 2026 DevSecOps Enhancements (What You Will Learn)”This repository has been upgraded from a standard CI/CD deployment into a modern DevSecOps pipeline. When reviewing the Dockerfile and Jenkinsfile integrations, note the following 2026 security practices:
- Unprivileged Container Execution: We explicitly block the Java microservice from running as a highly-privileged
rootuser. Instead, the Dockerfile builds an isolatedappusergroup on a minimal Alpine Linux distribution to run the JAR file. - Container Immutable Deployments: We avoid overwriting the
latesttag in our JFrog repository. Each successfully built artifact receives a unique semantic tag, ensuring Kubernetes deployments are rolling and easily rollback-able.
-
Configured SSH keys for password less authentication between Ansible Controller and Agent nodes.
-
Added GitHub credentials to the Jenkins Master and created Multibranch Pipeline job.
-
SonarQube:
- Generated an access token in SonarCloud and added SonarQube server credentials in Jenkins Master.
- Installed Sonarqube scanner plugin.
- Added Sonarqube server to the Jenkins Master in System section.
- Added Sonarqube scanner to the Jenkins Master in Tools section.
- Configured an organization and project in SonarCloud and wrote a sonar-project. properties file.
- Added sonarqube, unit tests and build stages in the Jenkinsfile.
-
EKS:
- Provisioned the EKS cluster with Terraform.
- Installed kubectl in Jenkins Slave.
- Installed AWS CLI v2 in Jenkins Slave to connect with AWS account.
- Downloaded Kubernetes credentials and cluster configuration from the cluster using the command
aws eks update-kubeconfig --region <region_name> --name <cluster_name>
-
- Note: Changed the default service type of Prometheus and Grafana services from ClusterIP to LoadBalancer to access them from the browser.
Hit the Star! ⭐
Section titled “Hit the Star! ⭐”If you are planning to use this repo for learning, please hit the star. Thanks!
