In real enterprise environments, applications are easy — delivery is hard.
This repository is intentionally built to demonstrate how production-grade CI/CD pipelines are designed, secured, and operated for real-world applications.
🔴 The application is deliberately simple.
🟢 The pipeline is intentionally complex.
The primary focus here is DevSecOps, quality gates, artifact governance, approval workflows, and VM-based deployments, not application features.
Modern delivery teams face challenges such as:
- Preventing vulnerable dependencies from reaching production
- Enforcing consistent quality standards across stacks
- Managing approvals and auditability
- Ensuring reliable deployments to long-lived environments (VMs)
- Balancing speed with security
This repository simulates those challenges and demonstrates how CI/CD pipelines solve them.
The application serves only as a delivery vehicle for the pipeline.
- Frontend: React
- Backend: Python (FastAPI / Uvicorn style)
- Containerization: Docker
- Deployment Target: Azure Virtual Machines
- Extensible To: AWS EC2, Containers, Kubernetes
This project showcases enterprise-grade CI/CD capabilities, including:
✅ Stage-based pipeline architecture
✅ Software Composition Analysis (Retire.js)
✅ Static Code Analysis (SonarQube / SonarCloud)
✅ Extensive linting & quality checks
• ESLint, Stylelint, Biome
• MarkdownLint, YAMLlint
• PyLint, Hadolint
✅ Artifact-based build and release strategy
✅ Manual approval gates for controlled deployments
✅ VM-based deployment automation using pipeline environments
This is a delivery pipeline, not a demo pipeline.
Primary pipeline file:
production-grade-pipeline.yml
The pipeline is structured to mirror how enterprises enforce security, governance, and traceability.
-
Software Composition Analysis
- Dependency vulnerability scanning using Retire.js
-
Static Code Analysis
- Code quality and maintainability checks via SonarQube/SonarCloud
-
Code Quality & Linting
- Frontend, backend, Dockerfile, YAML, and Markdown linting
- Non-blocking checks to surface issues without halting learning
-
Build & Artifact Packaging
- Frontend build → versioned artifact
- Backend packaging → deployable artifact
-
Approval Gate
- Manual validation to enforce change control
-
Deploy to Dev
- UI deployed to VM web directory
- Backend deployed, dependencies installed, and service started
- CI produces immutable artifacts
- CD deploys artifacts using Azure DevOps Environments
- Virtual Machines are treated as controlled delivery targets
- Deployment logic is separated from build logic
This closely mirrors enterprise VM-based delivery models still widely used in production.
- No secrets are committed to the repository
- Credentials are managed via:
- Azure DevOps Variable Groups
- Service Connections
- Approval gates ensure accountability and auditability
🔮 Planned enhancement:
OIDC / Federated authentication for password-less Azure access.
- VM deployments chosen to reflect legacy + hybrid environments
- linting to demonstrate quality enforcement
- Manual approvals included to reflect regulated environments
- Simplicity in application to keep focus on delivery mechanics
Bhabya Bharti
DevOps Engineer | CI/CD | Terraform | Azure | DevSecOps