Skip to content

NotHarshhaa/CI-CD_EKS-GitHub_Actions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

13 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ End-to-End CI/CD Pipeline for Node.js App Deployment on EKS using GitHub Actions

eksbanner


CI/CD Pipeline

πŸ“Œ Table of Contents


πŸ“‚ Repository Structure

The repository is structured for modularity and maintainability:

πŸ“‚ root  
β”œβ”€β”€ πŸ“‚ .github/workflows/      # GitHub Actions CI/CD workflows
β”‚   β”œβ”€β”€ ci.yml                 # Pure CI pipeline (testing, linting, security)
β”‚   β”œβ”€β”€ cd-production.yml      # Production deployment pipeline
β”‚   └── deployment.yml         # Multi-environment deployment with versioning
β”‚
β”œβ”€β”€ πŸ“‚ app                     # Application source code  
β”‚   β”œβ”€β”€ calculator.js          # Business logic for calculations  
β”‚   β”œβ”€β”€ calculator.test.js     # Unit tests for calculator functions  
β”‚   β”œβ”€β”€ Dockerfile             # Optimized Dockerfile for Node.js app  
β”‚   β”œβ”€β”€ index.js               # Main entry point of the Node.js application  
β”‚   └── package.json           # Project dependencies and scripts  
β”‚  
β”œβ”€β”€ πŸ“‚ 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 with image management  
β”‚   β”‚   └── svc.yaml           # Kubernetes Service definition  
β”‚   β”‚  
β”‚   β”œβ”€β”€ πŸ“‚ overlays            # Environment-specific configurations  
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ dev             # Dev environment-specific Kustomize configs  
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ prod            # Production environment with enhanced security  
β”‚   β”‚   └── πŸ“‚ staging         # Staging environment-specific configs  
β”‚  
β”œβ”€β”€ πŸ“‚ terraform               # Terraform configuration for infrastructure provisioning  
β”‚   β”œβ”€β”€ ingress-nginx.tf       # Terraform script for setting up NGINX Ingress  
β”‚   β”œβ”€β”€ main.tf                # Main Terraform file with EKS 1.29 & enhanced security  
β”‚   β”œβ”€β”€ outputs.tf             # Defines Terraform outputs  
β”‚   β”œβ”€β”€ terraform.tf           # Backend configuration with latest providers  
β”‚   └── variables.tf           # Input variables for Terraform modules  
β”‚  
β”œβ”€β”€ .eslintrc.js               # Enhanced ESLint with security plugins  
β”œβ”€β”€ .gitignore                 # Optimized gitignore with comprehensive coverage  
β”œβ”€β”€ docker-compose.yml         # Enhanced local development with Redis & SSL  
β”œβ”€β”€ nginx.conf                 # Production-ready Nginx with security headers  
β”œβ”€β”€ README.md                  # Project documentation and setup guide  
└── VERSION                    # Tracks application versioning (Semantic Versioning)  

πŸš€ Recent Improvements

This project has been comprehensively enhanced with modern best practices and security improvements:

πŸ”„ GitHub Actions Workflows

  • βœ… Organized Workflow Structure - Clear separation: CI, Production CD, Multi-Environment Deployment
  • βœ… Pure CI Pipeline - Testing, linting, security scanning (ci.yml)
  • βœ… Production CD - ECR integration, production deployment (cd-production.yml)
  • βœ… Multi-Environment Deployment - Version management, Terraform, DNS (deployment.yml)
  • βœ… Latest Action Versions - checkout@v4, setup-node@v4, codecov@v4
  • βœ… Enhanced CI Pipeline - Multi-node testing (18.x, 20.x) with fail-fast disabled
  • βœ… Security Scanning - Trivy vulnerability scanning with SARIF upload
  • βœ… Master Branch Support - Updated workflows to use master branch instead of main

πŸ—οΈ Terraform Infrastructure

  • βœ… EKS 1.29 - Latest stable version with enhanced add-ons
  • βœ… Modern Providers - AWS ~>5.50, Kubernetes ~>2.24, Helm ~>2.12
  • βœ… Enhanced Security - Encrypted GP3 volumes, private endpoints, CNI policies
  • βœ… Better Tagging - Comprehensive resource tagging strategy
  • βœ… Version Constraints - Terraform >=1.5.0 with provider version locking

πŸ“¦ Kustomize Configurations

  • βœ… Image Management - Centralized image tagging and updates
  • βœ… Enhanced Production - 3 replicas, proper secret management, environment configs
  • βœ… Better Structure - Improved base configuration with replica management
  • βœ… Secret Handling - Environment-based secret generation

🐳 Docker & Development

  • βœ… Redis Cache - Added Redis service for improved performance
  • βœ… SSL Support - HTTPS termination with modern cipher suites
  • βœ… Enhanced Nginx - Security headers, rate limiting, gzip compression
  • βœ… Health Checks - Comprehensive health monitoring for all services
  • βœ… Better Networking - Dedicated bridge network and volume management

πŸ”§ Development Tools

  • βœ… Security ESLint - Security plugins, import rules, promise handling
  • βœ… Optimized Gitignore - Clean, organized, comprehensive coverage
  • βœ… Code Quality - ES2022 standards, security-focused linting
  • βœ… Modern Standards - Latest Node.js 20 with proper caching

πŸ”§ Prerequisites

Before you proceed, ensure you have the following installed:

  • πŸ›  Node.js (>=20.x)
  • 🐳 Docker & Docker Compose
  • πŸ—οΈ Terraform (>=1.5.0)
  • ☸ kubectl (latest version)
  • 🎭 Kustomize
  • ☁ AWS CLI & eksctl
  • βš™οΈ GitHub Actions configured
  • πŸ”‘ AWS IAM permissions to manage EKS
  • πŸ”’ Security scanning tools (Trivy, CodeQL)

πŸƒβ€β™‚οΈ Quick Start (Local Development)

Option 1: Docker Compose (Recommended)

# 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

Option 2: Local Node.js Development

# 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 lint

βš™οΈ CI/CD Workflow

The CI/CD pipeline is organized into three specialized workflows using GitHub Actions:

οΏ½ CI Pipeline (ci.yml)

Triggers: Push/PR to master, develop, staging

1️⃣ Code Quality Checks

  • Install Node.js dependencies using npm ci
  • Run linting to ensure code quality standards

2️⃣ Testing & Coverage

  • Execute unit tests across Node.js 18.x and 20.x
  • Generate coverage reports with Codecov integration

3️⃣ Security Scanning

  • Run Trivy vulnerability scanner on codebase
  • Upload SARIF results to GitHub Security tab

πŸš€ Production CD Pipeline (cd-production.yml)

Triggers: Push to master, tags, manual dispatch

1️⃣ Build & Push

  • Build Docker image with production optimizations
  • Push to Amazon ECR with SHA tagging

2️⃣ Deploy to EKS

  • Update Kubernetes manifests using Kustomize
  • Deploy to production EKS cluster

3️⃣ Verification

  • Health checks and smoke tests
  • Security scanning of deployed image

🌍 Multi-Environment Deployment (deployment.yml)

Triggers: Push to prod/dev/staging, PR to dev

1️⃣ Version Management

  • Semantic versioning based on commit messages
  • Auto-tag and version file updates

2️⃣ Infrastructure Provisioning

  • Terraform EKS cluster management
  • Multi-environment infrastructure setup

3️⃣ Application Deployment

  • Docker builds for each environment
  • Kustomize deployments with environment-specific configs
  • DNS management via Cloudflare

4️⃣ Notifications

  • Slack integration for deployment status
  • Comprehensive deployment reporting

πŸš€ Deployment Job

1️⃣ Terraform Setup

  • Initializes Terraform with terraform init.
  • Ensures correct state management.

2️⃣ Infrastructure Provisioning

  • Executes terraform plan and terraform apply.
  • Deploys EKS clusters, networking, and storage.

3️⃣ Kubernetes Configuration

  • Configures kubectl to interact with the cluster.
  • Applies Kustomize overlays 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.

πŸ—οΈ Infrastructure Details

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.com
    • staging.example.com
    • prod.example.com

πŸ“¦ Application Deployment Strategy

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.


πŸ”„ GitOps Principles

βœ” 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.


πŸ”’ Security Best Practices

πŸ” 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.

πŸ“’ Notifications & Alerts

πŸ”” 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.

πŸ“Š Monitoring & Logging

βœ… Application Logs – Aggregated using Fluent Bit.
βœ… Infrastructure Logs – Stored in AWS CloudWatch Logs.
βœ… Metrics Monitoring – Tracked using Prometheus & Grafana.


πŸ“œ Contributing

Want to contribute? Here’s how:

  1. Fork the repository & create a new branch.
  2. Make your changes and commit with a descriptive message.
  3. Open a Pull Request (PR) for review.

⭐ Support & Author

⭐ Hit the Star!

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! πŸš€


πŸ› οΈ Author & Community

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!


πŸ“§ Let's Connect!

Stay connected and explore more DevOps content with me:

LinkedIn GitHub Telegram Dev.to Hashnode


πŸ“’ Stay Updated!

Want to stay up to date with the latest DevOps trends, best practices, and project updates? Follow me on my blogs and social channels!

Follow Me

About

A fully automated CI/CD pipeline that builds, tests, and deploys a Node.js application on Amazon EKS using GitHub Actions, Terraform, and Kubernetes.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors