A production-style CI/CD pipeline that automates the deployment of a Java application from source code to a live environment on Amazon EKS.
End-to-end pipeline that:
- Builds a Java (Spring Boot) application with Maven.
- Containerizes it using Docker
- Pushes the image to Amazon ECR
- Deploys to Amazon EKS using Kubernetes manifests
- Note: I replaced the real java app by a Java baseline since I can't share the real Java app for security reasons.
- Pulls
jenkins-jobsbranch - Uses Jenkins credentials for authentication
- Runs
mvn clean package - Executes unit tests
- Produces JAR artifact
- Builds image using Amazon Corretto base image
- Tags and pushes to ECR
- Authenticates with AWS
-
Configure kubeconfig:
aws eks update-kubeconfig --region us-east-1 --name demo-cluster -
Deploy to cluster:
kubectl apply -f kubernetes/ -
Performs rolling updates
- Jenkins (CI/CD) (Note: I used Jenkins because it was the default tool used by the workplace, however I would've used GitHub Actions or GitLab CI instead)
- Maven (Build)
- Docker (Containerization)
- AWS ECR (Registry)
- Kubernetes / EKS (Orchestration)
- AWS (Cloud)
- aws-cli, kubectl
- GitLab
- AWS CLI missing in Jenkins → Installed CLI in execution environment
- kubectl could not connect → Generated kubeconfig via AWS CLI
- Wrong EKS cluster name → Verified directly in AWS Console
- Jenkins agent vs controller confusion → Ensured tools run in agent
- Docker permission issues → Fixed execution context and permissions
Pipeline required 23+ runs to stabilize (see
pipelines_failures/)
- ✔ Application builds successfully
- ✔ Image pushed to ECR
- ✔ Kubernetes resources created
- ✔ Application deployed to EKS
- CI/CD failures are often environment-related, not code-related
- Strong understanding of Jenkins execution model (agent vs controller)
- Hands-on experience with:
- AWS CLI in pipelines
- ECR authentication
- EKS kubeconfig setup
- Kubernetes deployments
Go to evidence folder on project root to find screenshots. This project demonstrates the ability to design, implement, and debug a real-world CI/CD pipeline across Jenkins, Docker, AWS, and Kubernetes — focusing on reliability, not just implementation.