- π End-to-End CI/CD Pipeline for Node.js App Deployment on EKS using GitHub Actions
- π Table of Contents
- π Repository Structure
- π§ Prerequisites
- βοΈ CI/CD Workflow
- ποΈ Infrastructure Details
- π¦ Application Deployment Strategy
- π GitOps Principles
- π Security Best Practices
- π’ Notifications & Alerts
- π Monitoring & Logging
- π Contributing
- β Support & Author
- β Hit the Star!
- π οΈ Author & Community
- π§ Let's Connect!
- π’ Stay Updated!
The repository is structured for modularity and maintainability:
π root
βββ π .github/workflows/ # GitHub Actions CI/CD workflows
β βββ ci.yml # Continuous Integration pipeline
β βββ cd.yml # Continuous Deployment pipeline
β
βββ π app # Application source code
β βββ app.py # Python application logic (Flask)
β βββ calculator.js # Business logic for calculations
β βββ calculator.test.js # Unit tests for calculator functions
β βββ Dockerfile # Optimized Dockerfile for Node.js app
β βββ Dockerfile-python # Dockerfile for Python Flask version
β βββ index.js # Main entry point of the Node.js application
β βββ package.json # Project dependencies and scripts
β βββ requirements.txt # Python dependencies
β
βββ π kustomize # Kubernetes manifests managed with Kustomize
β βββ π base # Base configurations common for all environments
β β βββ deploy.yaml # Enhanced deployment with health checks & security
β β βββ ingress.yaml # Ingress configuration for routing traffic
β β βββ kustomization.yaml # Kustomize configuration file
β β βββ svc.yaml # Kubernetes Service definition
β β
β βββ π overlays # Environment-specific configurations
β β βββ π dev # Dev environment-specific Kustomize configs
β β β βββ deploy-dev.yaml # Dev-specific deployment file
β β β βββ ingress-dev.yaml # Dev-specific ingress settings
β β β βββ kustomization.yaml # Kustomize configuration for Dev
β β β βββ svc-dev.yaml # Dev-specific service settings
β β β
β β βββ π prod # Production environment-specific Kustomize configs
β β β βββ deploy-prod.yaml # Production-specific deployment file
β β β βββ ingress-prod.yaml # Production-specific ingress settings
β β β βββ kustomization.yaml # Kustomize configuration for Prod
β β β βββ svc-prod.yaml # Production-specific service settings
β β β
β β βββ π staging # Staging environment-specific Kustomize configs
β β β βββ deploy-staging.yaml # Staging-specific deployment file
β β β βββ ingress-staging.yaml # Staging-specific ingress settings
β β β βββ kustomization.yaml # Kustomize configuration for Staging
β β β βββ svc-staging.yaml # Staging-specific service settings
β
βββ π terraform # Terraform configuration for infrastructure provisioning
β βββ ingress-nginx.tf # Terraform script for setting up NGINX Ingress
β βββ main.tf # Main Terraform file defining AWS infrastructure
β βββ outputs.tf # Defines Terraform outputs (e.g., cluster endpoints)
β βββ terraform.tf # Backend configuration for Terraform state management
β βββ variables.tf # Input variables for Terraform modules
β
βββ .eslintrc.js # ESLint configuration for code quality
βββ .gitignore # Comprehensive gitignore file
βββ docker-compose.yml # Local development environment
βββ nginx.conf # Nginx configuration for local development
βββ README.md # Project documentation and setup guide
βββ VERSION # Tracks application versioning (Semantic Versioning)
This project has been enhanced with the following improvements:
- β Enhanced Error Handling - Better error responses and graceful shutdown
- β
Health Check Endpoints -
/healthendpoint for monitoring - β
API Endpoints - RESTful API at
/api/calculatefor programmatic access - β CORS Support - Cross-origin resource sharing enabled
- β Improved UI - Better styling and user experience
- β Graceful Shutdown - Proper signal handling for container orchestration
- β Multi-stage Docker Build - Optimized image size and security
- β Non-root User - Enhanced security with proper user permissions
- β Health Checks - Built-in container health monitoring
- β Signal Handling - Proper process management with dumb-init
- β Liveness & Readiness Probes - Better container health monitoring
- β Security Context - Enhanced security with non-root execution
- β Resource Management - Proper CPU and memory limits
- β Rolling Updates - Zero-downtime deployments
- β GitHub Actions Workflows - Automated CI/CD with security scanning
- β Multi-Node Testing - Testing across Node.js 18.x and 20.x
- β Security Scanning - Trivy vulnerability scanning
- β Code Quality - ESLint integration and coverage reporting
- β Docker Compose - Local development environment
- β ESLint Configuration - Code quality and consistency
- β Comprehensive .gitignore - Proper version control
- β Nginx Configuration - Local reverse proxy setup
Before you proceed, ensure you have the following installed:
- π Node.js (>=18.x)
- π³ Docker & Docker Compose
- ποΈ Terraform (>=1.0)
- βΈ kubectl (latest version)
- π Kustomize
- β AWS CLI & eksctl
- βοΈ GitHub Actions configured
- π AWS IAM permissions to manage EKS
# Clone the repository
git clone https://github.com/NotHarshhaa/CI-CD_EKS-GitHub_Actions.git
cd CI-CD_EKS-GitHub_Actions
# Start the application with Docker Compose
docker-compose up --build
# Access the application
# Web UI: http://localhost:80
# Health Check: http://localhost:80/health
# API: POST http://localhost:80/api/calculate# Navigate to app directory
cd app
# Install dependencies
npm install
# Run in development mode
npm run dev
# Run tests
npm test
# Run linting
npm run lintThe CI/CD pipeline automates the entire deployment process using GitHub Actions.
1οΈβ£ Set Up the Environment
- Install Node.js dependencies using
npm install. - Lint the code to ensure quality standards.
2οΈβ£ Run Tests
- Execute unit tests with
npm test. - Generate test reports for visibility.
3οΈβ£ Version Management
- Uses Semantic Versioning (
major.minor.patch). - Auto-increments the version based on commit messages.
4οΈβ£ Build & Push Docker Image
- Builds a Docker image of the application.
- Pushes it to Amazon Elastic Container Registry (ECR).
1οΈβ£ Terraform Setup
- Initializes Terraform with
terraform init. - Ensures correct state management.
2οΈβ£ Infrastructure Provisioning
- Executes
terraform planandterraform apply. - Deploys EKS clusters, networking, and storage.
3οΈβ£ Kubernetes Configuration
- Configures
kubectlto interact with the cluster. - Applies
Kustomizeoverlays for environment-specific settings.
4οΈβ£ Ingress Controller Setup
- Uses Helm to install NGINX Ingress.
5οΈβ£ Application Deployment
- Deploys the latest Docker image to Kubernetes.
- Exposes the service via Ingress and Load Balancer.
| Environment | Instance Type | Replica Count |
|---|---|---|
| Dev | t3.small |
1 |
| Staging | t3.medium |
3 |
| Prod | t3.large |
3 |
β DNS Automation via Cloudflare
- Environment-specific subdomains:
dev.example.comstaging.example.comprod.example.com
This project supports multiple deployment strategies:
β
Rolling Updates β Default strategy, ensuring zero downtime.
β
Blue-Green Deployment β Used in production environments.
β
Canary Deployments β Gradual rollout for safe updates.
β Git as the Source of Truth
β Declarative Infrastructure (Terraform & Kubernetes)
β Automated Deployments via GitHub Actions
Every infrastructure change must be made via a Git commit.
π Secrets Management
- Uses AWS Secrets Manager & GitHub Actions encrypted secrets.
π‘ Container Security
- Uses Trivy and Docker Bench Security for vulnerability scanning.
π§ IAM & Least Privilege
- Uses AWS IAM roles with restricted access.
π Slack & Email Notifications
- CI/CD Job Updates β Pipeline status alerts.
- DNS Updates β Cloudflare integration for alerts.
π‘ Monitoring & Logging
- AWS CloudWatch for logs & metrics.
- Prometheus & Grafana for observability.
β
Application Logs β Aggregated using Fluent Bit.
β
Infrastructure Logs β Stored in AWS CloudWatch Logs.
β
Metrics Monitoring β Tracked using Prometheus & Grafana.
Want to contribute? Hereβs how:
- Fork the repository & create a new branch.
- Make your changes and commit with a descriptive message.
- Open a Pull Request (PR) for review.
If you find this repository helpful and plan to use it for learning, please consider giving it a star β. Your support motivates me to keep improving and adding more valuable content! π
This project is crafted with passion by Harshhaa π‘.
Iβd love to hear your feedback! Feel free to open an issue, suggest improvements, or just drop by for a discussion. Letβs build a strong DevOps community together!
Stay connected and explore more DevOps content with me:
Want to stay up to date with the latest DevOps trends, best practices, and project updates? Follow me on my blogs and social channels!


