I'm a DevOps Engineer focused on cloud infrastructure, CI/CD automation, containerization, and reliable deployments. I also have a background in backend development, building and deploying applications with modern technologies.
+92
contact@sajan.tech
https://sajan.tech
Karachi
End-to-end GitOps CI/CD pipeline for the VProfile application on Amazon EKS. GitHub Actions runs Maven tests, Checkstyle and SonarQube Quality Gate checks, builds and pushes the application image to Amazon ECR, then updates the separate Helm repository with the new image tag. Argo CD detects the Git change and synchronizes the Helm-defined desired state to the EKS cluster.
Client
# π VProfile β GitOps Delivery Platform on AWS EKS > **An end-to-end DevOps and GitOps implementation for building, testing, containerizing, and continuously deploying the VProfile application to Amazon EKS.**
--- ## π― What This Project Is This repository combines three focused components into one complete delivery platform: | Component | Responsibility | |---|---| | [`vprofile-app`](./vprofile-app) | Java application, tests, Docker build and GitHub Actions CI | | [`vprofile-helm`](./vprofile-helm) | Helm chart, Kubernetes desired state and Argo CD configuration | | [`vprofile-infra`](./vprofile-infra) | AWS infrastructure and EKS provisioning with Terraform | The platform demonstrates a practical delivery chain: **Pull Request β Build & Test β Checkstyle β SonarQube β Quality Gate** and, after changes reach `main`: **Build VProfile Image β Amazon ECR β Update Helm Repository β Argo CD β Amazon EKS β AWS Load Balancer β Application** --- # ποΈ Architecture  ### Platform Flow ```text βββββββββββββββββββββββ β Developer β β Source Code β ββββββββββββ¬βββββββββββ β βΌ βββββββββββββββββββββββ β GitHub β β vprofile-app β ββββββββββββ¬βββββββββββ β βββββββββββββββββ΄βββββββββββββββββ β β Pull Request Push to main β β βΌ βΌ ββββββββββββββββββββ ββββββββββββββββββββ β GitHub Actions β β GitHub Actions β β Build + Test β β Docker Build β β Checkstyle β β VProfile App β β SonarQube β ββββββββββ¬ββββββββββ β Quality Gate β β ββββββββββββββββββββ βΌ ββββββββββββββββββ β Amazon ECR β β VProfile Image β βββββββββ¬βββββββββ β βΌ βββββββββββββββββββββββββββ β vprofile-helm β β β β values.yaml image/tag β ββββββββββββββ¬βββββββββββββ β β Git push βΌ ββββββββββββββ β Argo CD β β GitOps β βββββββ¬βββββββ β βΌ ββββββββββββββ β AWS EKS β β Kubernetes β βββββββ¬βββββββ β βΌ ββββββββββββββββββββ β AWS Load Balancerβ β / Kubernetes β β Ingress β ββββββββββ¬ββββββββββ β βΌ π VProfile App ``` ### Runtime Application Components The CI pipeline **builds and publishes the VProfile application image**. The supporting services are deployed from their configured container images through the Helm deployment. ```text AWS EKS β βββββββββββββββΌββββββββββββββ β β β βΌ βΌ βΌ VProfile App Database RabbitMQ (ECR image) (configured (configured container) container) β ββββββββ¬βββββββ βΌ Memcached (configured container) + application dependencies defined by the chart ``` The exact image sources, tags, replicas, services, and configuration are maintained in: ```text vprofile-helm/helm/vprofile/values.yaml ``` --- # π CI/CD Pipeline The application workflow is: ```text vprofile-app/.github/workflows/ci.yml ``` The workflow uses **two event-driven paths**. ## 1. Pull Request β Build, Test & Quality Validation When a pull request targets `main`: ```text Pull Request β βΌ Checkout β βΌ JDK 21 β βΌ Maven Build + Unit Tests β βΌ Checkstyle β βΌ SonarQube Analysis β βΌ SonarQube Quality Gate ``` The workflow: - Checks out the repository with full history. - Sets up JDK 21. - Caches Maven dependencies. - Caches the Sonar scanner cache. - Runs `mvn clean verify checkstyle:checkstyle -B`. - Runs the SonarQube scan. - Waits for the SonarQube quality-gate result. Evidence:   --- ## 2. Push to `main` β Build & Publish VProfile Image When changes are pushed to `main`, the delivery path builds **the VProfile application image**: ```text Push to main β βΌ Checkout β βΌ Configure AWS Credentials β βΌ Create ECR Repository if Needed β βΌ Build VProfile Docker Image β βΌ Tag with 7-character Git SHA β ββββββββββββββββΊ : β ββββββββββββββββΊ :latest β βΌ Push to Amazon ECR ``` The application image is built from: ```text Docker-files/app/multistage/Dockerfile ``` The pipeline does **not** build separate Docker images for the database, RabbitMQ, or Memcached as part of this job. Those supporting services use their configured container images through the Kubernetes/Helm deployment. Evidence:  --- # π GitOps Deployment Flow After the VProfile image is successfully pushed to ECR, the workflow updates the separate Helm repository. ```text VProfile image pushed to ECR β βΌ Clone vprofile-helm β βΌ Install yq β βΌ Update values.yaml β βββ app.image βββ app.tag β βΌ Commit Helm change β βΌ Push to Helm repo β βΌ Argo CD β βΌ Synchronize to EKS ``` The workflow updates: ```yaml app: image: tag: <7-character Git SHA> ``` in: ```text vprofile-helm/helm/vprofile/values.yaml ``` This creates a clear separation: ```text Application Repository β β build βΌ Amazon ECR β β image reference βΌ Helm / GitOps Repository β β desired state βΌ Argo CD β βΌ AWS EKS ``` Evidence:   --- # βΈοΈ Kubernetes & Helm The Kubernetes delivery configuration lives in: ```text vprofile-helm/ ``` The main Helm chart is: ```text vprofile-helm/helm/vprofile/ ``` It contains templates for the application stack, including: - Application Deployment - Database Deployment - RabbitMQ Deployment - Memcached Deployment - Services - PersistentVolumeClaim - Secrets - Ingress - Docker registry authentication The repository also retains Kubernetes definitions under: ```text vprofile-helm/kubedefs/ ``` This makes the repository useful both as a record of the Kubernetes resources and as the Helm-based desired-state source used for GitOps delivery. --- # π Argo CD Argo CD provides the GitOps deployment layer. ```text Git β β desired Kubernetes state βΌ Argo CD β β sync βΌ Amazon EKS β βΌ VProfile workloads ``` Argo CD-related configuration is maintained under: ```text vprofile-helm/argocd/ vprofile-helm/apps/ vprofile-helm/projects/ ``` Argo CD watches the configured Git source and applies the desired state to the Kubernetes cluster.  --- # ποΈ AWS Infrastructure with Terraform The AWS infrastructure is maintained in: ```text vprofile-infra/ ``` Terraform configuration includes: ```text vprofile-infra/ βββ main.tf βββ variables.tf βββ outputs.tf βββ backend.tf βββ iam_policy.json ``` The repository also contains: ```text argocd-ingress.yaml ``` for supporting Kubernetes/Argo CD ingress configuration. The infrastructure layer provides the AWS/EKS foundation on which the GitOps deployment runs. β‘οΈ [`vprofile-infra`](./vprofile-infra) --- # π Ingress & Application Access The application is exposed through Kubernetes Ingress and the AWS Load Balancer integration. ```text Internet β βΌ AWS Load Balancer β βΌ Kubernetes Ingress β βΌ VProfile Service β βΌ VProfile Pod ``` Evidence:  Final application verification:  --- # π SonarQube Server Setup The project includes: ```text resources/scripts/sonar-setup.sh ``` This is a reusable setup script for installing and configuring the SonarQube server on an Ubuntu EC2 instance used by the CI quality-analysis workflow. The script handles the server-side setup required for the SonarQube environment, including Java, PostgreSQL, SonarQube configuration, systemd service configuration, and Nginx reverse proxy configuration. It is intentionally kept as an implementation artifact so the CI quality-analysis environment is reproducible. --- # π€ AI-Assisted Implementation Prompts The project also contains a reusable prompt library: ```text resources/prompts/ ``` These prompts document how AI assistance was used during implementation to generate or transform specific infrastructure and GitOps components. | Prompt | Purpose | |---|---| | `01-terraform-eks.md` | Generate Terraform configuration for AWS/EKS infrastructure | | `02-ebs-csi-driver.md` | Configure the AWS EBS CSI Driver for Kubernetes storage | | `03-helm-chart.md` | Transform Kubernetes definitions into a reusable Helm chart | | `04-argocd-and-ingress.md` | Generate Argo CD and Ingress configuration | | `05-argocd-vprofile-app.md` | Generate the Argo CD application configuration for VProfile | ### AI-Assisted Workflow ```text Requirements / Existing Configuration β βΌ AI Implementation Prompt β βΌ Generated Configuration β βΌ Review & Modify β βΌ Validate / Test β βΌ Deploy ``` The prompts are provided as **reproducible implementation references**. Generated output was reviewed, modified where necessary, validated, and integrated into the project. --- # π Repository Structure ```text GitOps-Argo/ β βββ README.md βββ SECURITY.md β βββ resources/ β βββ commands/ β β βββ 01-install-tools.md β β βββ 02-terraform-bootstrap.md β β βββ 03-aws-eks-and-kubeconfig.md β β βββ 04-alb-cert-manager.md β β βββ 05-argocd.md β β βββ 06-vprofile-verification.md β β β βββ prompts/ β β βββ 01-terraform-eks.md β β βββ 02-ebs-csi-driver.md β β βββ 03-helm-chart.md β β βββ 04-argocd-and-ingress.md β β βββ 05-argocd-vprofile-app.md β β β βββ screenshots/ β βββ scripts/ β β βββ sonar-setup.sh β βββ variables/ β βββ github-variables-and-secrets.example.md β βββ vprofile-app/ β βββ .github/workflows/ β β βββ ci.yml β βββ Docker-files/ β βββ src/ β βββ pom.xml β βββ sonar-project.properties β βββ vprofile-helm/ β βββ apps/ β βββ argocd/ β βββ helm/ β β βββ vprofile/ β βββ kubedefs/ β βββ projects/ β βββ vprofile-infra/ βββ main.tf βββ variables.tf βββ outputs.tf βββ backend.tf βββ iam_policy.json βββ argocd-ingress.yaml ``` --- # π§ Where to Start If you are reviewing this project for the first time, follow this path: ### 01 β Understand the architecture Start with: ```text resources/screenshots/01-architecture.png ``` Then read this README. ### 02 β Review the application CI workflow Open: ```text vprofile-app/.github/workflows/ci.yml ``` Pay particular attention to: - Pull request quality checks - Maven build and tests - Checkstyle - SonarQube - Docker image build - Amazon ECR publishing - Helm repository update ### 03 β Review the infrastructure Open: ```text vprofile-infra/ ``` Start with: ```text main.tf variables.tf outputs.tf ``` ### 04 β Review Kubernetes and Helm Open: ```text vprofile-helm/ ``` Start with: ```text helm/vprofile/values.yaml helm/vprofile/templates/ ``` Then inspect: ```text kubedefs/ argocd/ apps/ projects/ ``` ### 05 β Follow the GitOps path Trace the image reference from: ```text GitHub Actions β Amazon ECR β vprofile-helm/values.yaml β Argo CD β EKS ``` ### 06 β Review deployment evidence Open: ```text resources/screenshots/ ``` The screenshots provide visual evidence of the major implementation stages. --- # π§° Resources ## Commands ```text resources/commands/ ``` Sequential command references covering: 1. Tool installation 2. Terraform bootstrap 3. AWS EKS and kubeconfig 4. ALB and certificate configuration 5. Argo CD setup 6. VProfile verification ## Prompts ```text resources/prompts/ ``` Reusable AI-assisted implementation prompts for the infrastructure and GitOps components. ## Screenshots ```text resources/screenshots/ ``` Implementation and deployment evidence. ## Scripts ```text resources/scripts/ ``` Reusable automation scripts, including the SonarQube EC2 setup script. ## Variables ```text resources/variables/ ``` Reference configuration for GitHub Actions variables and secrets. --- # π§ͺ Verification The following checks can be used to verify the deployed environment. ### Terraform ```bash terraform plan terraform apply ``` ### Kubernetes ```bash kubectl get nodes kubectl get pods -A kubectl get svc -A kubectl get ingress -A ``` ### Helm ```bash helm lint ./vprofile-helm/helm/vprofile ``` ### Argo CD Verify that: - The VProfile application exists. - The Git repository is connected. - The application is synchronized. - The application health is healthy. - The expected Kubernetes resources are running. ### Application Open the configured application endpoint through the Load Balancer/Ingress and verify the VProfile application. --- # πΈ Deployment Evidence | # | Evidence | |---:|---| | 01 | Architecture | | 02 | EKS cluster | | 03 | SonarQube quality gate | | 04 | Build and test | | 05 | Amazon ECR images | | 06 | ECR image + Helm update | | 07 | Argo CD dashboard | | 08 | Image tag update | | 09 | AWS Load Balancer | | 10 | VProfile application | All screenshots are stored in: ```text resources/screenshots/ ``` --- # π― What This Project Demonstrates This project demonstrates practical implementation of: - Infrastructure as Code with Terraform - Amazon EKS - AWS networking and IAM - Docker containerization - Amazon ECR - GitHub Actions - Maven builds and automated tests - Checkstyle - SonarQube analysis - SonarQube quality gates - Kubernetes - Helm - Kubernetes Services - Ingress - Persistent storage - Kubernetes Secrets - Argo CD - GitOps - Multi-tier application deployment - CI-driven container delivery - Git-based Kubernetes desired state - Operational verification and troubleshooting --- # π Security Security guidance is available in: β‘οΈ [`SECURITY.md`](./SECURITY.md) For production use: - Replace demonstration credentials. - Store sensitive values in an appropriate secret-management system. - Apply least-privilege IAM policies. - Restrict AWS Security Group access. - Configure HTTPS/TLS appropriately. - Never commit credentials, access keys, tokens, or private keys. - Rotate credentials when required. --- # π§© Separation of Responsibilities The project intentionally separates application, deployment, and infrastructure responsibilities. ```text ββββββββββββββββββββββββββββββββββββ β vprofile-app β β β β Java + Maven + Tests + CI β β Docker Build + ECR Publishing β ββββββββββββββββββ¬ββββββββββββββββββ β β Image βΌ ββββββββββββββββ β Amazon ECR β ββββββββ¬ββββββββ β β Image reference βΌ ββββββββββββββββββββββββββββββββββββ β vprofile-helm β β β β Helm + Kubernetes + Argo CD β β Git-based Desired State β ββββββββββββββββββ¬ββββββββββββββββββ β β Sync βΌ βββββββββββββ β Argo CD β βββββββ¬ββββββ β βΌ βββββββββββββ β AWS EKS β βββββββββββββ ββββββββββββββββββββββββββββββββββββ β vprofile-infra β β β β Terraform + AWS Infrastructure β ββββββββββββββββββββββββββββββββββββ ``` This separation makes the platform easier to understand, maintain, and evolve. --- # β End-to-End Summary ```text ββββββββββββββββ β GitHub β β vprofile-app β ββββββββ¬ββββββββ β βββ Pull Request βββΊ Build + Test + Checkstyle β β β βΌ β SonarQube β β β βΌ β Quality Gate β βββ Push to main βββΊ Docker Build β βΌ Amazon ECR β βΌ Update Helm values β βΌ Git push β βΌ Argo CD β βΌ AWS EKS β βΌ AWS Load Balancer β βΌ VProfile App ``` ### Core Delivery Model **Application CI β Container Registry β Git-based Desired State β Argo CD β Kubernetes** --- ## π Quick Navigation | Resource | Purpose | |---|---| | [`vprofile-app`](./vprofile-app) | Application, tests, Docker and CI | | [`vprofile-helm`](./vprofile-helm) | Helm, Kubernetes and Argo CD | | [`vprofile-infra`](./vprofile-infra) | Terraform and AWS infrastructure | | [`resources/commands`](./resources/commands) | Step-by-step command references | | [`resources/prompts`](./resources/prompts) | AI-assisted implementation prompts | | [`resources/screenshots`](./resources/screenshots) | Deployment evidence | | [`resources/scripts`](./resources/scripts) | Automation scripts | | [`resources/variables`](./resources/variables) | GitHub configuration reference | | [`SECURITY.md`](./SECURITY.md) | Security guidance | --- > **Infrastructure as Code β Continuous Integration β Container Registry β GitOps β Kubernetes β Application Delivery**
Your email address will not be published. Required fields are marked *