Files
cmdb-insight/docs/AZURE-PIPELINES-USAGE.md
Bert Hausmans 42a04e6cb3 Add Azure deployment automation and documentation
- Add separate deployment pipeline (azure-pipelines-deploy.yml) for App Service deployment
- Add advanced pipeline with deployment slots (azure-pipelines-slots.yml)
- Restore azure-pipelines.yml to build-only (no deployment)
- Add comprehensive Azure setup documentation:
  - AZURE-NEW-SUBSCRIPTION-SETUP.md: Complete step-by-step Azure resource setup
  - AZURE-RESOURCES-OVERVIEW.md: Quick reference for all Azure resources
  - AZURE-ACR-SHARED-SETUP.md: Guide for shared Container Registry
  - AZURE-ACR-NAMING-RECOMMENDATION.md: Naming recommendations for Zuyderland
  - AZURE-PIPELINE-DEPLOYMENT.md: Automated deployment setup guide
  - AZURE-PIPELINE-QUICK-REFERENCE.md: Quick reference for pipeline variables
  - AZURE-PIPELINES-USAGE.md: Guide for using build and deployment pipelines
- Add setup script (scripts/setup-azure-resources.sh) for automated resource creation
- Support for shared ACR across multiple applications
2026-01-21 23:03:48 +01:00

6.4 KiB

Azure Pipelines Usage Guide

Guide for using the separate build and deployment pipelines.

📋 Pipeline Files

1. azure-pipelines.yml - Build and Push Images

Purpose: Builds Docker images and pushes them to Azure Container Registry.

What it does:

  • Builds backend Docker image
  • Builds frontend Docker image
  • Pushes both to ACR with tags: $(Build.BuildId) and latest

When to use:

  • First time setup (to test image building)
  • After code changes (to build new images)
  • Before deployment (to ensure images are in ACR)

Configuration:

variables:
  acrName: 'zdlas'  # Your ACR name
  repositoryName: 'cmdb-insight'
  dockerRegistryServiceConnection: 'zuyderland-cmdb-acr-connection'

2. azure-pipelines-deploy.yml - Deploy to App Service

Purpose: Deploys existing images from ACR to Azure App Services.

What it does:

  • Deploys backend container to App Service
  • Deploys frontend container to App Service
  • Restarts both App Services
  • Verifies deployment with health checks

When to use:

  • After images are built and pushed to ACR
  • When you want to deploy/update the application
  • For production deployments

Configuration:

variables:
  acrName: 'zdlas'  # Your ACR name
  resourceGroup: 'rg-cmdb-insight-prod'  # Your resource group
  backendAppName: 'cmdb-backend-prod'  # Your backend app name
  frontendAppName: 'cmdb-frontend-prod'  # Your frontend app name
  azureSubscription: 'zuyderland-cmdb-subscription'  # Azure service connection
  imageTag: 'latest'  # Image tag to deploy

🚀 Workflow

Step 1: Build and Push Images

  1. Configure azure-pipelines.yml:

    • Update acrName with your ACR name
    • Update dockerRegistryServiceConnection with your service connection name
  2. Create Pipeline in Azure DevOps:

    • Go to PipelinesNew pipeline
    • Select Existing Azure Pipelines YAML file
    • Choose azure-pipelines.yml
    • Run the pipeline
  3. Verify Images in ACR:

    az acr repository list --name zdlas
    az acr repository show-tags --name zdlas --repository cmdb-insight/backend
    az acr repository show-tags --name zdlas --repository cmdb-insight/frontend
    

Step 2: Deploy Application

  1. Ensure App Services exist:

    • Backend App Service: cmdb-backend-prod
    • Frontend App Service: cmdb-frontend-prod
    • See AZURE-NEW-SUBSCRIPTION-SETUP.md for setup instructions
  2. Configure azure-pipelines-deploy.yml:

    • Update all variables with your Azure resource names
    • Create Azure service connection for App Service deployment
    • Create production environment in Azure DevOps
  3. Create Deployment Pipeline:

    • Go to PipelinesNew pipeline
    • Select Existing Azure Pipelines YAML file
    • Choose azure-pipelines-deploy.yml
    • Run the pipeline
  4. Verify Deployment:

    • Check backend: https://cmdb-backend-prod.azurewebsites.net/api/health
    • Check frontend: https://cmdb-frontend-prod.azurewebsites.net

🔧 Setup Requirements

For Build Pipeline (azure-pipelines.yml)

Required:

  • Docker Registry service connection (for ACR)
  • ACR exists and is accessible
  • Service connection has push permissions

Setup:

  1. Create Docker Registry service connection:
    • Project SettingsService connectionsNew service connection
    • Choose Docker RegistryAzure Container Registry
    • Select your ACR
    • Name: zuyderland-cmdb-acr-connection

For Deployment Pipeline (azure-pipelines-deploy.yml)

Required:

  • Azure Resource Manager service connection
  • App Services exist in Azure
  • production environment created in Azure DevOps
  • Images exist in ACR

Setup:

  1. Create Azure service connection:

    • Project SettingsService connectionsNew service connection
    • Choose Azure Resource Manager
    • Select your subscription
    • Name: zuyderland-cmdb-subscription
  2. Create environment:

    • PipelinesEnvironmentsCreate environment
    • Name: production
    • (Optional) Add approvals for manual control

📝 Typical Usage Scenarios

Scenario 1: First Time Setup

# 1. Build and push images
# Run azure-pipelines.yml → Images in ACR

# 2. Create App Services (manual or via script)
# See AZURE-NEW-SUBSCRIPTION-SETUP.md

# 3. Deploy application
# Run azure-pipelines-deploy.yml → App deployed

Scenario 2: Code Update

# 1. Push code to main branch
git push origin main

# 2. Build pipeline runs automatically
# azure-pipelines.yml → New images in ACR

# 3. Deploy new version
# Run azure-pipelines-deploy.yml → App updated

Scenario 3: Deploy Specific Version

# 1. Update azure-pipelines-deploy.yml
imageTag: 'v1.0.0'  # Or specific build ID

# 2. Run deployment pipeline
# Deploys specific version

🔄 Combining Pipelines (Future)

Once you're comfortable with both pipelines, you can:

  1. Combine them into one pipeline with conditional deployment
  2. Use deployment slots for zero-downtime updates
  3. Add approval gates for production deployments

See azure-pipelines-slots.yml for an advanced example with deployment slots.

🛠️ Troubleshooting

Build Pipeline Fails

Issue: "Service connection not found"

  • Solution: Verify service connection name matches dockerRegistryServiceConnection variable

Issue: "ACR not found"

  • Solution: Check acrName variable matches your ACR name

Deployment Pipeline Fails

Issue: "App Service not found"

  • Solution: Verify app names match your Azure resources

Issue: "Environment not found"

  • Solution: Create production environment in Azure DevOps

Issue: "Image not found in ACR"

  • Solution: Run build pipeline first to push images to ACR

Checklist

Build Pipeline Setup

  • Docker Registry service connection created
  • azure-pipelines.yml variables configured
  • Pipeline created in Azure DevOps
  • Test run successful
  • Images visible in ACR

Deployment Pipeline Setup

  • Azure Resource Manager service connection created
  • production environment created
  • App Services exist in Azure
  • azure-pipelines-deploy.yml variables configured
  • Deployment pipeline created in Azure DevOps
  • Test deployment successful

Workflow: Build first → Deploy second → Verify success!