FundMe is a Global Banking and Financial services provider implementing microservice architecture with complete DevOps CI/CD pipeline. This project demonstrates:
- Spring Boot Microservice with REST APIs
- H2/MySQL Database for data storage
- Docker containerization
- Kubernetes orchestration
- Jenkins CI/CD pipeline
- Terraform Infrastructure as Code
- Ansible Configuration Management
- Prometheus & Grafana Monitoring
| Technology | Purpose |
|---|---|
| Java 17 | Programming Language |
| Spring Boot 2.7.4 | Microservice Framework |
| H2 Database | In-Memory Database (POC) |
| MySQL | Production Database |
| Maven | Build Tool |
| JUnit/TestNG | Testing Framework |
| Docker | Containerization |
| Kubernetes | Container Orchestration |
| Jenkins | CI/CD Pipeline |
| Terraform | Infrastructure as Code |
| Ansible | Configuration Management |
| Prometheus | Metrics Collection |
| Grafana | Monitoring Dashboard |
| Endpoint | Method | Description | Request Body |
|---|---|---|---|
/createAccount |
POST | Create new account | JSON |
/updateAccount/{accountNo} |
PUT | Update account | JSON |
/viewPolicy/{accountNo} |
GET | View account details | None |
/deletePolicy/{accountNo} |
DELETE | Delete account | None |
/accounts |
GET | List all accounts | None |
/health |
GET | Health check | None |
Create Account:
curl -X POST http://localhost:8082/createAccount \
-H "Content-Type: application/json" \
-d '{
"accountNumber": 1006,
"accountName": "Vedanth Gumaj",
"accountType": "Savings",
"accountBalance": 50000.00
}'Response:
{
"accountNumber": 1006,
"accountName": "Vedanth Gumaj",
"accountType": "Savings",
"accountBalance": 50000.0
}View Account:
curl http://localhost:8082/viewPolicy/1001BankingWebApp/
βββ src/
β βββ main/
β β βββ java/com/project/banking/
β β β βββ BankingApplication.java # Main Application
β β β βββ Account.java # Entity
β β β βββ AccountController.java # REST Controller
β β β βββ AccountService.java # Service Layer
β β β βββ AccountRepository.java # Data Repository
β β βββ resources/
β β βββ application.properties # App Configuration
β β βββ data.sql # Preloaded Data
β βββ test/java/com/project/banking/
β βββ BankingApplicationTests.java
β βββ TestAccountService.java
β βββ AccountServiceTestNG.java # TestNG Tests
β βββ AccountControllerTestNG.java # TestNG Tests
βββ terraform/ # IaC for AWS
β βββ main.tf
β βββ variables.tf
β βββ outputs.tf
βββ ansible/ # Configuration Management
β βββ install-jenkins.yml
β βββ deploy-app.yml
β βββ install-monitoring.yml
β βββ install-node-exporter.yml
β βββ inventory/
β βββ test
β βββ prod
βββ prometheus/ # Monitoring
β βββ prometheus.yml
β βββ grafana-dashboard.json
βββ Dockerfile # Container Image
βββ Jenkinsfile # CI/CD Pipeline
βββ bankingdeploy.yaml # K8s Deployment
βββ testng.xml # TestNG Suite
βββ pom.xml # Maven Config
βββ README.md
- Java 17+
- Maven 3.6+
- Docker (optional)
# Clone repository
git clone https://github.com/vedanthgumaj-afk/BankingWebApp.git
cd BankingWebApp
# Build and run
mvn clean spring-boot:run# Build image
docker build -t vedanthgumaj/bankingwebapp .
# Run container
docker run -p 8082:8082 vedanthgumaj/bankingwebapp- Application: http://localhost:8082
- H2 Console: http://localhost:8082/h2-console
- Actuator Health: http://localhost:8082/actuator/health
- Prometheus Metrics: http://localhost:8082/actuator/prometheus
mvn testmvn test
# Report available at: target/surefire-reports/index.htmlThe Jenkinsfile defines the following stages:
- Checkout - Clone code from GitHub
- Build - Compile with Maven
- Test - Run JUnit/TestNG tests
- Package - Create JAR file
- Docker Build - Build container image
- Docker Push - Push to DockerHub
- Deploy to Test - Deploy via Ansible
- Integration Tests - Verify deployment
- Deploy to Kubernetes - Production deployment
cd terraform
# Initialize Terraform
terraform init
# Preview changes
terraform plan
# Apply changes
terraform apply- VPC with public subnet
- 4 EC2 instances:
- Jenkins Server (t2.medium)
- Test Server (t2.micro)
- Production Server (t2.micro)
- Monitoring Server (t2.micro)
- Security groups with required ports
ansible-playbook -i ansible/inventory/test ansible/install-jenkins.ymlansible-playbook -i ansible/inventory/test ansible/deploy-app.ymlansible-playbook -i ansible/inventory/prod ansible/install-monitoring.yml- CPU Utilization - Real-time CPU usage per server
- Disk Space Utilization - Storage usage percentage
- Total Available Memory - RAM availability
- Prometheus: http://<MONITORING_IP>:9090
- Grafana: http://<MONITORING_IP>:3000 (admin/admin)
# Build image
docker build -t vedanthgumaj/bankingwebapp:latest .
# Push to DockerHub
docker login
docker push vedanthgumaj/bankingwebapp:latest
# Run container
docker run -d -p 8082:8082 --name bankingapp vedanthgumaj/bankingwebapp:latest
# View logs
docker logs bankingapp# Apply deployment
kubectl apply -f bankingdeploy.yaml
# Check status
kubectl get pods
kubectl get services
kubectl get hpa
# Access via NodePort
# http://<NODE_IP>:31022The application comes with sample accounts:
| Account No | Name | Type | Balance |
|---|---|---|---|
| 1001 | John Doe | Savings | βΉ50,000 |
| 1002 | Jane Smith | Current | βΉ75,000 |
| 1003 | Bob Wilson | Savings | βΉ25,000 |
| 1004 | Alice Johnson | Current | βΉ1,00,000 |
| 1005 | Charlie Brown | Savings | βΉ35,000 |
Vedanth Gumaj
- GitHub: @vedanthgumaj-afk
- DockerHub: vedanthgumaj
This project is for educational purposes - DevOps Certification Project.