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-304-369-6643
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
An end-to-end DevOps and GitOps implementation for building, testing, containerizing, and continuously deploying the VProfile application to Amazon EKS.
This repository combines three focused components into one complete delivery platform:
| Component | Responsibility |
|---|---|
vprofile-app |
Java application, tests, Docker build and GitHub Actions CI |
vprofile-helm |
Helm chart, Kubernetes desired state and Argo CD configuration |
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

βββββββββββββββββββββββ
β 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
The CI pipeline builds and publishes the VProfile application image. The supporting services are deployed from their configured container images through the Helm deployment.
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:
vprofile-helm/helm/
vprofile/values.yaml
The application workflow is:
vprofile-app
/.github/workflows/ci
.yml
The workflow uses two event-driven paths.
When a pull request targets main:
Pull Request
β
βΌ
Checkout
β
βΌ
JDK
21
β
βΌ
Maven Build
+ Unit Tests
β
βΌ
Checkstyle
β
βΌ
SonarQube Analysis
β
βΌ
SonarQube Quality Gate
The workflow:
mvn clean verify checkstyle:checkstyle -B.Evidence:


main β Build & Publish VProfile ImageWhen changes are pushed to main, the delivery path builds the VProfile application image:
Push to main
β
βΌ
Checkout
β
βΌ
Configure AWS Credentials
β
βΌ
Create
ECR Repository if
Needed
β
βΌ
Build
VProfile Docker Image
β
βΌ
Tag with
7
-character
Git SHA
β
ββββββββββββββββΊ :<commit
-sha
>
β
ββββββββββββββββΊ :latest
β
βΌ
Push to
Amazon ECR
The application image is built from:
Docker-files/app/mu
ltistage/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:

After the VProfile image is successfully pushed to ECR, the workflow updates the separate Helm repository.
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:
app:
image:
<ECR image>
tag:
<7
-character Git SHA>
in:
vprofile-helm/helm/
vprofile/values.yaml
This creates a clear separation:
Application Repository
β
β build
βΌ
Amazon ECR
β
β image reference
βΌ
Helm / GitOps Repository
β
β desired state
βΌ
Argo CD
β
βΌ
AWS EKS
Evidence:


The Kubernetes delivery configuration lives in:
vprofile-helm/
The main Helm chart is:
vprofile-helm/helm/
vprofile/
It contains templates for the application stack, including:
The repository also retains Kubernetes definitions under:
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 provides the GitOps deployment layer.
Git
β
β desired Kubernetes state
βΌ
Argo CD
β
β sync
βΌ
Amazon EKS
β
βΌ
VProfile workloads
Argo CD-related configuration is maintained under:
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.

The AWS infrastructure is maintained in:
vprofile-infra/
Terraform configuration includes:
vprofile-infra/
βββ main.tf
βββ variables.tf
βββ outputs.tf
βββ backend.tf
βββ iam_policy.json
The repository also contains:
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
The application is exposed through Kubernetes Ingress and the AWS Load Balancer integration.
Internet
β
βΌ
AWS
Load Balancer
β
βΌ
Kubernetes
Ingress
β
βΌ
VProfile
Service
β
βΌ
VProfile
Pod
Evidence:

Final application verification:

The project includes:
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.
The project also contains a reusable prompt library:
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 |
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.
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
If you are reviewing this project for the first time, follow this path:
Start with:
resources/screenshots/
01
-architecture.png
Then read this README.
Open:
vprofile-app
/.github/workflows/ci
.yml
Pay particular attention to:
Open:
vprofile-infra/
Start with:
main.tf
variables.tf
outputs.tf
Open:
vprofile-helm/
Start with:
helm/vprofile/
values.yaml
helm/vprofile/
templates/
Then inspect:
kubedefs/
argocd/
apps/
projects/
Trace the image reference from:
GitHub Actions
β
Amazon ECR
β
vprofile-helm/values.yaml
β
Argo CD
β
EKS
Open:
resources/screenshots/
The screenshots provide visual evidence of the major implementation stages.
resources/commands/
Sequential command references covering:
resources/prompts/
Reusable AI-assisted implementation prompts for the infrastructure and GitOps components.
resources/screenshots/
Implementation and deployment evidence.
resources/scripts/
Reusable automation scripts, including the SonarQube EC2 setup script.
resources/variables/
Reference configuration for GitHub Actions variables and secrets.
The following checks can be used to verify the deployed environment.
terraform plan
terraform apply
kubectl
get
nodes
kubectl
get
pods -A
kubectl
get
svc
-A
kubectl
get
ingress -A
helm lint ./vprofile-helm/
helm/vprofile
Verify that:
Open the configured application endpoint through the Load Balancer/Ingress and verify the VProfile application.
| # | 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:
resources/screenshots/
This project demonstrates practical implementation of:
Security guidance is available in:
β‘οΈ SECURITY.md
For production use:
The project intentionally separates application, deployment, and infrastructure responsibilities.
ββββββββββββββββββββββββββββββββββββ
β 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.
ββββββββββββββββ
β 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
Application CI β Container Registry β Git-based Desired State β Argo CD β Kubernetes
| Resource | Purpose |
|---|---|
vprofile-app |
Application, tests, Docker and CI |
vprofile-helm |
Helm, Kubernetes and Argo CD |
vprofile-infra |
Terraform and AWS infrastructure |
resources/commands |
Step-by-step command references |
resources/prompts |
AI-assisted implementation prompts |
resources/screenshots |
Deployment evidence |
resources/scripts |
Automation scripts |
resources/variables |
GitHub configuration reference |
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 *
These cookies are essential for the website to function properly.
These cookies help us understand how visitors interact with the website.
These cookies are used to deliver personalized advertisements.