This repository serves as the Configuration Layer Template in the Release Engine three-tier solution. It provides a simple, user-friendly interface for configuring and deploying workloads while hiding the underlying pipeline complexity.
π¨ Important: This is a template repository. Organizations should clone this repository for each workload they want to deploy.
Configuration Layer (THIS REPO) β Abstraction Layer (Patterns) β Core Layer (Pipelines)
- Workload Configuration: Simple interface for complex deployment orchestration
- Environment Management: Environment-specific variables and parameter files
- Pipeline Entry Point: Single
azure-pipelines.ymlthat triggers sophisticated deployments - Template Foundation: Starting point for each new workload deployment
βββ azure-pipelines.yml # Main pipeline entry point
βββ README.md # This documentation
βββ AGENTS.md # AI assistant instructions
βββ _config/ # Configuration directory
βββ metadata.yml # Workload metadata and global settings
βββ environments/ # Environment-specific variables
β βββ vars-development.yml # Development environment settings
β βββ vars-test.yml # Test environment settings
β βββ vars-production.yml # Production environment settings
βββ parameters/ # Bicep parameter files
βββ pattern1.parameters.json
βββ pattern2.parameters.json
- Simple Interface: Hide pipeline complexity behind simple configuration files
- Environment Promotion: Automatic promotion from dev β test β production
- Token Replacement: Variables automatically replaced in parameter files
- Single Source: One repository per workload for complete isolation
# Clone this template repository
git clone https://github.com/thecloudexplorers/release-engine-config-template.git
# Rename for your specific workload
mv release-engine-config-template my-workload-configuration
cd my-workload-configuration# Add upstream remote for future updates
git remote add upstream https://github.com/thecloudexplorers/release-engine-config-template.git
# Set new origin (your workload repository)
git remote set-url origin https://github.com/myorg/my-workload-configuration.git
# Verify configuration
git remote -v- Select Pattern: Choose appropriate pattern from your workload pattern repository
- Update Pipeline: Modify
azure-pipelines.ymlwith your pattern and repositories - Configure Metadata: Set workload information in
_config/metadata.yml - Set Environment Variables: Configure
_config/environments/vars-*.ymlfiles - Create Parameter Files: Add pattern-specific parameter files
name: $(Build.DefinitionName)_$(Date:yyyyMMdd)$(Rev:.r)
resources:
repositories:
- repository: release-engine-core # DO NOT CHANGE ALIAS
type: github
name: thecloudexplorers/release-engine-core
endpoint: <your-github-endpoint>
ref: refs/heads/main
- repository: workload # DO NOT CHANGE ALIAS
type: github
name: <your-org>/release-engine-<your-org>-workload-patterns
endpoint: <your-github-endpoint>
ref: refs/heads/main
trigger:
- main
- users/*
- develop
pool: <your-agent-pool>
extends:
template: /patterns/<pattern_name>/workload.yml@workload
parameters:
deploymentSettings:
configurationFilePath: /_config
environments:
- name: development
dependsOn: build
displayName: Dev
primaryEnvironment: true
- name: test
dependsOn: development
displayName: Test
- name: production
dependsOn: test
displayName: Prod- Repository References: Update to point to your organization's repositories
- GitHub Endpoints: Use your organization's GitHub service connections
- Agent Pool: Specify your Azure DevOps agent pool
- Pattern Selection: Choose appropriate pattern from your workload repository
variables:
# Landing Zone Information
landingZoneName: "applications"
landingZoneAbbreviation: "app"
# Workload Information
applicationName: "my-web-application"
applicationAbbreviation: "mwa"
workload: "webapp_with_database" # Must match pattern name
workload_location: "westeurope"
# Azure Environment
subscriptionId: "12345678-1234-1234-1234-123456789abc"
# Ownership (Optional but Recommended)
primary_owner: "devops-team@myorg.com"
cost_center: "IT-APPS-001"
environment_type: "non-prod"variables:
# Environment Identification
environmentAbbreviation: dev
environment_stage_abbreviation: dev
# Location Settings
workloadLocation: westeurope
# Development-Appropriate Sizing
appServicePlanSku: B1 # Basic tier for development
sqlDatabaseSku: Basic # Minimal database for dev
storageAccountSku: Standard_LRS # Local redundancy sufficient
# Feature Flags
enableBackup: false # No backup needed in dev
enableMonitoring: true # Keep monitoring for debugging
enableDiagnostics: true # Enable for troubleshootingvariables:
# Environment Identification
environmentAbbreviation: prd
environment_stage_abbreviation: prd
# Location Settings
workloadLocation: westeurope
# Production-Grade Sizing
appServicePlanSku: P2V3 # Premium tier for production
sqlDatabaseSku: S2 # Standard tier with good performance
storageAccountSku: Standard_GRS # Geo-redundant storage
# Feature Flags
enableBackup: true # Backup critical for production
enableMonitoring: true # Full monitoring in production
enableDiagnostics: true # Full diagnostics enabledParameter files use token replacement for environment-specific values:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"resourceLocation": {
"value": "#{workloadLocation}#"
},
"applicationName": {
"value": "#{applicationName}#"
},
"environmentAbbreviation": {
"value": "#{environmentAbbreviation}#"
},
"appServicePlanSku": {
"value": "#{appServicePlanSku}#"
},
"enableBackup": {
"value": "#{enableBackup}#"
},
"tags": {
"value": {
"Environment": "#{environmentAbbreviation}#",
"Owner": "#{primary_owner}#",
"CostCenter": "#{cost_center}#",
"Application": "#{applicationName}#"
}
}
}
}- Format:
#{variable_name}#(case-sensitive) - Sources: Environment variables, metadata variables, built-in pipeline variables
- Validation: Pipeline fails if tokens aren't replaced
# Fetch upstream improvements
git fetch upstream
# Create integration branch
git checkout -b upstream-sync-$(date +%Y%m%d)
# Merge upstream changes
git merge upstream/main
# Resolve conflicts (preserve your workload configuration)
# Test changes in development environment
# Push and create PR to main- β Configuration Improvements: Better configuration patterns and examples
- β Bug Fixes: Fixes to pipeline configuration or token replacement
- β Documentation Updates: Improved setup guides and troubleshooting
- β New Features: Additional configuration options and capabilities
- π Workload Configuration: Your specific workload metadata and settings
- π Environment Variables: Your environment-specific configurations
- π Parameter Files: Your pattern-specific parameter configurations
- π Pipeline Customizations: Your organization-specific pipeline modifications
Perfect for web applications with databases:
- Frontend Applications: React, Angular, Vue.js applications
- Backend APIs: REST APIs, GraphQL services
- Full-Stack Applications: Applications with frontend and backend components
Ideal for serverless computing scenarios:
- Event Processing: Process events from queues, topics, or storage
- API Backends: Lightweight API implementations
- Integration Solutions: Connect different systems and services
Suitable for containerized applications:
- Microservices: Individual services in a larger system
- Legacy Applications: Containerized legacy applications
- Multi-Container Applications: Applications requiring multiple containers
For data processing and analytics:
- Data Warehouses: Analytics and reporting solutions
- ETL Pipelines: Data transformation and movement
- Streaming Analytics: Real-time data processing
# Validate pipeline YAML syntax
az pipelines validate --yaml-path azure-pipelines.yml --organization https://dev.azure.com/myorg --project myproject
# Validate JSON parameter files
Get-Content "_config/parameters/workload.parameters.json" | Test-Json# Check for unreplaced tokens
$paramFiles = Get-ChildItem "_config/parameters/*.json"
foreach ($file in $paramFiles) {
$content = Get-Content $file.FullName -Raw
$tokens = [regex]::Matches($content, '#\{([^}]+)\}#')
if ($tokens.Count -gt 0) {
Write-Host "Tokens found in $($file.Name):" -ForegroundColor Yellow
$tokens | ForEach-Object { Write-Host " $($_.Value)" }
}
}- Deploy to Development: Test full pipeline in development environment
- Validate Resources: Ensure all expected resources are created
- Test Functionality: Verify deployed workload functions correctly
- Check Outputs: Validate all expected outputs are generated
- Environment Promotion: Test dev β test β prod promotion
- Configuration Differences: Verify environment-specific configurations work
- Rollback Testing: Test failure scenarios and recovery procedures
- Create Variable File:
_config/environments/vars-staging.yml - Update Pipeline: Add staging environment to pipeline configuration
- Set Dependencies: Configure staging to depend on test environment
# In azure-pipelines.yml
environments:
- name: development
dependsOn: build
displayName: Dev
primaryEnvironment: true
- name: test
dependsOn: development
displayName: Test
- name: staging
dependsOn: test
displayName: Staging
- name: production
dependsOn: staging
displayName: ProdSome workloads may require multiple patterns:
# Override parameter file for specific pattern
extends:
template: /patterns/multi_stage_pattern/workload.yml@workload
parameters:
deploymentSettings:
configurationFilePath: /_config
# Use specific parameter file for dependent stages
iacParameterFileName: /parameters/multi_stage.dependent2.parameters.json
environments: [...]Modify metadata.yml to match your organization:
variables:
# Use your organization's naming standards
resourcePrefix: "myorg"
namingConvention: "resource-{prefix}-{workload}-{environment}"
# Organization-specific tags
companyName: "My Organization"
department: "Engineering"
businessUnit: "Digital Products"Problem: Pipeline doesn't start when pushing to main branch Solutions:
- β
Check trigger configuration in
azure-pipelines.yml - β Verify branch protection rules
- β Ensure service connections have proper permissions
Problem: Tokens like #{variableName}# not being replaced
Solutions:
- β Check variable name spelling (case-sensitive)
- β Ensure variable exists in environment or metadata files
- β
Verify token syntax:
#{variableName}#
Problem: Bicep deployment fails with parameter errors Solutions:
- β Check JSON parameter file syntax
- β Ensure all required parameters are provided
- β Verify parameter value types match Bicep template expectations
Problem: Azure resource deployment fails Solutions:
- β Check Azure permissions for service principal
- β Verify resource quotas and limits
- β Check resource naming conflicts
- β Review deployment logs for specific errors
# Check configuration file syntax
Test-Json -Path "_config/metadata.yml"
# List all configuration files
Get-ChildItem -Recurse "_config/" -Include "*.yml", "*.json"
# Validate parameter files
$paramFiles = Get-ChildItem "_config/parameters/*.json"
foreach ($file in $paramFiles) {
Write-Host "Validating $($file.Name)..."
try {
Get-Content $file.FullName | ConvertFrom-Json | Out-Null
Write-Host "β
Valid JSON" -ForegroundColor Green
} catch {
Write-Host "β Invalid JSON: $($_.Exception.Message)" -ForegroundColor Red
}
}- Comprehensive Guide: Detailed instructions in AGENTS.md
- Community Support: GitHub Discussions for questions and best practices
- Issue Reporting: GitHub Issues for bugs and feature requests
- Documentation: Complete examples and templates
- Release Engine Core: Core pipeline orchestration framework
- Workload Patterns: Pattern template repository
- Architecture Documentation
This template has been successfully used for:
- E-commerce Platforms: Multi-tier web applications with databases and caching
- API Services: RESTful services with authentication and monitoring
- Data Analytics: Data processing pipelines with storage and compute
- Microservices: Container-based distributed applications
- Legacy Modernization: Lift-and-shift applications with cloud-native enhancements
- π Start Simple: Begin with basic patterns, add complexity gradually
- π Iterate Frequently: Deploy often to catch issues early
- π Monitor Everything: Use comprehensive monitoring from day one
- π‘οΈ Security First: Implement security controls from the beginning
- π Document Decisions: Keep clear documentation of configuration choices
This template repository enables simple configuration of sophisticated workload deployments. Clone once per workload, configure for your needs, and enjoy automated multi-environment deployments with enterprise-grade pipeline orchestration.