Skip to content

CI/CD Overview

Microtec ERP uses Azure DevOps Pipelines for all build, test, and deployment automation. The pipeline ecosystem is designed around a config-driven, toggle-based model where a single services-config.json (with 13 services across 5 environments) drives all deployment decisions.


Pipeline Ecosystem Summary


File Layout

All pipeline files live under Devops/azure/:

Devops/azure/
├── pipelines/
│   ├── container-backend/
│   │   ├── all-repos-pipeline.yml          # All 13 services from all repos (manual)
│   │   ├── platforms-pipeline.yml          # Platforms repo services (7)
│   │   ├── hr-pipeline.yml                 # HR Personnel service
│   │   ├── keycloak-pipeline.yml           # Keycloak service
│   │   ├── infrastructure-pipeline.yml     # InfrastructureServices (3 services)
│   │   ├── fast-deploy-pipeline.yml        # Image-only fast deploy
│   │   ├── production-release-pipeline.yml # Prod promotion with approvals
│   │   ├── deprovision-pipeline.yml        # Tear down environment
│   │   └── workflow-pipeline.yml           # WorkflowDesigner service
│   └── front-apps/
│       └── [frontend pipelines]
├── templates/
│   ├── stages/
│   │   ├── initialize.stage.yml
│   │   ├── build-docker.stage.yml
│   │   ├── deploy-container.stage.yml
│   │   ├── provision-infra.stage.yml
│   │   ├── fast-deploy.stage.yml
│   │   ├── approval.stage.yml
│   │   └── notify.stage.yml
│   ├── jobs/
│   │   ├── detect-container-services.job.yml
│   │   └── detect-frontend-apps.job.yml
│   └── steps/
│       ├── backend/
│       ├── frontend/
│       └── common/
├── config/
│   └── container-backend/
│       └── services-config.json            # Master config (13 services)
├── scripts/
│   ├── infra/
│   │   └── Build-BicepParams.ps1
│   ├── detect/
│   └── [other script categories]
└── infrastructure/
    └── main.bicep                          # Root Bicep entry point

Branch → Environment Mapping

Pipeline triggers fire based on the branch name matched against these rules:

Branch PatternTarget EnvironmentDeploy ModeApproval Required
main, master, productionProductionFull deployYes
stage, stagingStageFull deployNo
PreProd, preprodPre-ProductionFull deployNo
uatUATFull deployNo
All other branchesDevelopmentFull deployNo

Two Deploy Paths

PathPipelineTimeWhen to Use
Full deploypipelines/container-backend/platforms-pipeline.yml (and others)~20–30 minNew features, config changes, infra changes
Fast deploypipelines/container-backend/fast-deploy-pipeline.yml~3–8 minHotfixes — image change only, no infra/config changes

See Fast Deploy Path for when NOT to use fast deploy.


Build Agents

Agent TypePoolUsed By
Self-hostedMIC-EG-AGENTAll backend container pipelines (has Docker, .NET SDK, ACR auth)
Microsoft-hostedubuntu-latestFrontend Angular builds (public npm access)

Self-hosted agent servers:

ServerIPNotes
eg-build-01192.168.120.88Primary
eg-build-02192.168.120.122Secondary
eg-build-05192.168.120.44Tertiary

Agents run Ubuntu 22.04 with Azure CLI 2.85.0, Docker 24.x, and .NET 8 SDK pre-installed.


Pipeline Variable Groups

Each environment has a corresponding variable group in Azure DevOps Library:

Variable GroupScope
container-backend-sharedShared across all environments (NuGet uses System.AccessToken)
container-backend-secrets-devDev environment secrets
container-backend-secrets-stageStage environment secrets
container-backend-secrets-preprodPreprod environment secrets
container-backend-secrets-uatUAT environment secrets
container-backend-secrets-productionProduction environment secrets

$(System.AccessToken)

The NuGet private feed uses the built-in $(System.AccessToken) pipeline identity for authentication. This token is automatically provisioned by Azure DevOps and never expires. No manual PAT management required.


Config-Driven Architecture

All deploy pipelines read services-config.json at runtime. This single file is the source of truth for:

  • Which services exist
  • Which Docker image to build/deploy per service
  • CPU, memory, and replica settings per environment
  • Environment variables and secret references per service
  • Network profile (public or private CAE)
  • Scaling rules and health probe paths

See Services Config for the full schema and how to add a new service.


Deployment Lifecycle Diagram


Internal Documentation — Microtec Platform Team