Skip to content

haideralimazari/SkillPulse-Azure-DevOps-CICD

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚡ SkillPulse

A full-stack skill tracking web application — built to demonstrate end-to-end DevOps practices including containerization, CI/CD automation, cloud deployment, and infrastructure management.

🖼️ Application Screenshots

Dashboard UI (New Design)

SkillPulse New UI

Dashboard UI (Original Design)

SkillPulse Original UI


🎯 What I Built & What I Learned

This project was built from scratch to gain hands-on experience with real-world DevOps workflows. Every component was deliberately chosen to mirror industry practices.

🐳 Docker & Containerization

  • Designed a multi-service Docker Compose setup with 3 containers: MySQL database, Go backend API, and Nginx reverse proxy
  • Wrote a multi-stage Dockerfile for the Go backend — separating the build stage from the runtime stage to produce a lightweight production image
  • Configured health checks so dependent services wait for the database to be ready before starting
  • Managed persistent volumes for database storage across container restarts

All 3 containers running live on Azure VM:

Docker PS


🔄 CI/CD Pipeline — Azure DevOps

  • Built a 4-stage automated pipeline from scratch: Code Quality → Build → Test → Deploy
  • Every git push to main automatically triggers the full pipeline — no manual deployment needed
  • Implemented health check verification after deployment to confirm the app is live
  • Pipeline completed in under 4 minutes end-to-end

Pipeline runs — all stages passing:

Pipeline Runs

Stage breakdown — Code Quality, Build, Test, Deploy:

Pipeline Stages


☁️ Cloud Infrastructure — Azure VM

  • Provisioned and configured an Azure Ubuntu VM as the deployment target
  • Set up a self-hosted Azure DevOps agent on the VM using a custom bash installer script
  • The agent registers as a systemd service — starts automatically on VM reboot

Agent installation on Azure VM:

Agent Active Terminal

Agent showing Online in Azure DevOps:

Agent Online Azure


📋 Agile Project Management — Azure Boards

  • Managed the entire project using Azure Boards with a proper Scrum workflow
  • Organized work into Epics → Features → Tasks to simulate a real team environment
  • All 4 Epics completed: Project Infrastructure, Backend Development, Frontend Development, CI/CD Pipeline

Kanban board — all Epics marked Done:

Azure Boards Kanban


🔀 Nginx — Reverse Proxy

  • Configured Nginx to serve the static frontend and simultaneously proxy API requests to the Go backend — all on port 80
  • Eliminates CORS issues and mimics how production applications route traffic

🗄️ Database Design

  • Designed the MySQL schema with an initialization script that runs automatically on first container start
  • Connected the Go backend to MySQL using environment variables — no hardcoded credentials

🔐 Secrets Management

  • All sensitive values (passwords, tokens) stored as Azure DevOps Variable Group secrets — never committed to the repository
  • The pipeline injects secrets at runtime into the .env file

🏗️ System Architecture

┌─────────────────────────────────────────────┐
│                 User Browser                │
└──────────────────────┬──────────────────────┘
                       │ HTTP :80
          ┌────────────▼────────────┐
          │          Nginx          │
          │  Static Files + Proxy   │
          └──┬─────────────────────┘
             │ /api/* → :8080
   ┌──────────▼──────────┐    ┌─────────────────┐
   │     Go Backend      │───▶│   MySQL 8.0     │
   │    REST API         │    │   Database      │
   └─────────────────────┘    └─────────────────┘

          Hosted on: Azure VM (Ubuntu)
          Deployed via: Azure DevOps Pipeline
          Agent: Self-hosted on same VM

🔄 CI/CD Pipeline Flow

Git Push to main
       │
       ▼
① Code Quality
  └── Validate docker-compose.yml syntax
       │
       ▼
② Build
  └── Build all Docker images
       │
       ▼
③ Test
  └── Start DB container
  └── Wait for DB health check
  └── Run integration tests
  └── Cleanup test environment
       │
       ▼
④ Deploy
  └── docker compose up -d --build
  └── Health check on /health endpoint
  └── Prune old Docker images

🛠️ Tech Stack

Layer Technology Purpose
Frontend HTML, CSS, JavaScript Skill tracking dashboard UI
Backend Go (Golang) REST API server
Database MySQL 8.0 Persistent data storage
Reverse Proxy Nginx Traffic routing + static file serving
Containerization Docker + Docker Compose Service orchestration
CI/CD Azure DevOps Pipelines Automated build, test, deploy
Cloud Azure VM (Ubuntu) Production server
Agent Azure DevOps Self-hosted Pipeline execution on VM
Project Mgmt Azure Boards (Scrum) Agile workflow tracking
Version Control Git + Azure Repos Source code management

📁 Project Structure

skillpulse/
├── backend/
│   ├── main.go              # Go REST API (health, skills, sessions)
│   └── Dockerfile           # Multi-stage build → lightweight image
├── frontend/
│   ├── index.html           # Dashboard UI
│   ├── css/style.css        # Dark/light theme, responsive design
│   └── js/app.js            # Fetch API, dynamic rendering
├── nginx/
│   └── nginx.conf           # Reverse proxy + static file config
├── mysql/
│   └── init.sql             # Auto-executed schema on first run
├── docker-compose.yml       # 3-service orchestration with health checks
├── azure-pipelines.yml      # 4-stage CI/CD pipeline definition
├── install-agent.sh         # Self-hosted agent installer script
├── docs/
│   └── screenshots/         # Project screenshots
└── .env.example             # Environment variable template

🚀 Running Locally

# Clone
git clone https://github.com/haideralimazari/SkillPulse-Azure-DevOps-CICD.git
cd skillpulse

# Configure
cp .env.example .env
# Edit .env with your values

# Run
docker compose up -d --build

# Open
# http://localhost          → Dashboard
# http://localhost/health   → Health Check
# http://localhost/api/skills → API

📡 API Endpoints

Method Endpoint Description
GET /health Service health check
GET /api/skills Fetch all skills
POST /api/skills Create a new skill
DELETE /api/skills/:id Remove a skill
POST /api/skills/:id/log Log a learning session
GET /api/dashboard Aggregated stats

🔗 Azure DevOps Project

Full project board, pipeline runs, and repo history:

👉 dev.azure.com/haidermazari83/SkillPulse

About

Full-Stack Skill Tracker with automated 4-stage CI/CD pipeline hosted on Azure Ubuntu VM via Self-Hosted Agent.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors