This project demonstrates a comprehensive end-to-end CI/CD infrastructure for a containerized application.
It leverages Terraform for AWS infrastructure provisioning, GitHub Actions for continuous integration, and ArgoCD for GitOps-based continuous deployment on a Kubernetes cluster.
- EC2 Instance: Required for accessing EKS and AWS CLI.
- Backend for Terraform (S3 & DynamoDB):
Stores state files in S3 and uses DynamoDB for state locking to ensure collaboration. - Amazon EKS (Elastic Kubernetes Service):
Fully managed Kubernetes cluster with auto-healing and auto-scaling features. Used to deploy our applications with continuous deployment support. - Amazon VPC (Virtual Private Cloud):
Provides secure VPC with public/private subnets, route tables, and isolated networking for security. - Amazon Route53:
Used for DNS and routing traffic to our domain (e.g., https://iamnkdevopseng.shop).
- EKS Cluster: Managed Kubernetes service for deploying and managing workloads.
- Ingress Resource: Exposes the application publicly.
- Automates the build, test, Docker image creation, and manifest update process.
- Pipeline Stages:
- Build → Checkout code, setup Go, install dependencies, build services, and run unit tests.
- Code Quality → Runs
golangci-lintfor linting and code quality checks. - Docker → Builds and pushes Docker images to Docker Hub.
- Update Manifests → Updates Kubernetes manifests with new image tags and pushes them to the repo.
- Continuously syncs Kubernetes manifests from GitHub.
- Ensures that the application is always deployed with the latest version on EKS.
- AWS account with required IAM permissions
- Docker, AWS CLI, Terraform & Git installed locally
- EKS Cluster (provisioned via Terraform)
.
├── .github/ # GitHub Actions & CI configs
├── ArgoCD/ # ArgoCD set up documentation
├── internal/ # Internal tools/scripts
├── kubernetes/ # Kubernetes manifests for all services
├── pb/ # Protocol buffers
├── src/ # Source code of all services
├── test/ # Testing configs
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── docker-compose.yml
├── buildkitd.toml
├── package.json
└── other configs (.env, renovate.json5, etc.)
Automates provisioning of:
- VPC, subnets, internet gateway
- EKS Cluster
- S3 bucket & DynamoDB for state management
- Runs the project locally with a single
docker-compose.ymlfile. - Helps test the application before deploying.
- Deployments, Services, Ingress, and LoadBalancer services.
- Service Account setup.
- Manifests are automatically updated by GitHub Actions.
- Auto-syncs Kubernetes manifests from GitHub.
- Deploys the app to the EKS cluster continuously.
Defines the pipeline with:
- Code checkout
- Build & push Docker images
- Code quality checks
- Kubernetes manifest updates
Nandkishor Khandare
Cloud & DevOps / SRE Engineer
