24-Hour Azure DevOps Learning Progress Tracker
Check off each hour as you complete it to track your progress through this comprehensive Azure DevOps learning journey.
๐ Introduction & Prerequisites
Welcome to the most comprehensive 24-hour Azure DevOps learning guide! This intensive course is designed to take you from complete beginner to implementing professional DevOps practices with Microsoft Azure DevOps Services.
What You'll Learn
- Complete Azure DevOps platform mastery
- Version control with Azure Repos and Git integration
- Project management with Azure Boards and Agile methodologies
- CI/CD pipelines with Azure Pipelines
- Automated testing with Azure Test Plans
- Package management with Azure Artifacts
- Infrastructure as Code with ARM templates
- Monitoring, security, and compliance practices
- Building a complete end-to-end DevOps workflow
Prerequisites
- Basic understanding of the software development lifecycle
- Familiarity with Git version control
- Basic knowledge of cloud computing concepts
- Understanding of web applications and APIs
- Microsoft Azure account (free tier available)
- Azure DevOps organization (free for up to 5 users)
Pro Tip: Azure DevOps is a comprehensive suite of development tools that supports the entire software development lifecycle. It integrates seamlessly with Azure cloud services and supports multiple programming languages and platforms.
Learning Strategy
Each 2-hour block includes:
- Theory (30 minutes): Core DevOps concepts and Azure services
- Practice (60 minutes): Hands-on implementation and configuration
- Application (30 minutes): Real-world scenarios and best practices
Why Learn Azure DevOps?
- Industry Standard: Used by thousands of organizations worldwide
- Complete Platform: End-to-end DevOps solution in one place
- Cloud Integration: Native integration with Azure cloud services
- Scalability: Supports teams from 1 to 10,000+ developers
- Flexibility: Works with any language, platform, and cloud
- Cost Effective: Free tier available with generous limits
Hour 1-2: Azure DevOps Fundamentals & Setup
Understanding DevOps
DevOps is a set of practices that combines software development (Dev) and IT operations (Ops) to shorten the development lifecycle and provide continuous delivery with high software quality.
Azure DevOps Services Overview
- Azure Repos: Git repositories for source control
- Azure Boards: Agile project management tools
- Azure Pipelines: CI/CD pipelines for build and deployment
- Azure Test Plans: Manual and automated testing tools
- Azure Artifacts: Package management and feeds
Setting Up Azure DevOps Organization
az --version
az extension add --name azure-devops
az login
az devops configure --defaults organization=https://dev.azure.com/{your-org-name}
Exercise 1.1: Azure DevOps Setup
Complete your Azure DevOps environment setup:
- Create Azure DevOps organization
- Install Azure CLI and DevOps extension
- Create your first project
- Configure user permissions
- Explore the Azure DevOps interface
Hour 1-2 Summary
Congratulations! You've successfully:
- โ
Understood DevOps principles and Azure DevOps services
- โ
Set up Azure DevOps organization and project
- โ
Configured Azure CLI and DevOps extension
- โ
Learned about pricing and licensing options
- โ
Configured user access and permissions
Hour 3-4: Azure Repos & Version Control
Azure Repos Overview
Azure Repos provides Git repositories for source control of your code. It supports both Git and Team Foundation Version Control (TFVC), though Git is recommended for new projects.
Creating and Configuring Repositories
# Create new Git repository
az repos create --name "MyApp" --project "MyFirstProject"
# List repositories
az repos list --project "MyFirstProject"
# Clone repository
git clone https://dev.azure.com/{org}/{project}/_git/{repo}
# Configure Git for Azure DevOps
git config user.name "Your Name"
git config user.email "your.email@company.com"
# Add Azure DevOps as remote
git remote add origin https://dev.azure.com/{org}/{project}/_git/{repo}
Branch Policies and Protection
# Branch policy configuration (via web interface)
# Navigate to Project Settings > Repositories > Policies
# Common branch policies:
# - Require a minimum number of reviewers
# - Check for linked work items
# - Check for comment resolution
# - Require build validation
# - Automatically include code reviewers
# - Reset code reviewer votes when there are new changes
Pull Request Workflow
# Create feature branch
git checkout -b feature/user-authentication
# Make changes and commit
git add .
git commit -m "Add user authentication feature"
# Push feature branch
git push origin feature/user-authentication
# Create pull request via CLI
az repos pr create --title "Add user authentication" --description "Implements login/logout functionality" --source-branch feature/user-authentication --target-branch main
# List pull requests
az repos pr list --project "MyFirstProject"
# Complete pull request
az repos pr update --id {pr-id} --status completed
Hour 3-4 Summary
You've mastered:
- โ
Azure Repos setup and configuration
- โ
Git integration with Azure DevOps
- โ
Branch policies and protection
- โ
Pull request workflow
Hour 5-6: Azure Boards & Project Management
Azure Boards Overview
Azure Boards provides agile project management tools including work item tracking, Kanban boards, backlogs, team dashboards, and custom reporting.
Work Item Types
- Epic: Large body of work that can be broken down into features
- Feature: Shippable chunk of work that provides value
- User Story: Requirement from user's perspective
- Task: Work that needs to be done
- Bug: Issue that needs to be fixed
- Test Case: Steps to validate functionality
Creating and Managing Work Items
# Create work items via CLI
az boards work-item create --title "User Authentication System" --type "Feature" --project "MyFirstProject"
az boards work-item create --title "As a user, I want to login" --type "User Story" --project "MyFirstProject"
az boards work-item create --title "Implement login API" --type "Task" --project "MyFirstProject"
# List work items
az boards work-item show --id {work-item-id}
# Update work item
az boards work-item update --id {work-item-id} --state "In Progress"
# Link work items
az boards work-item relation add --id {parent-id} --target-id {child-id} --relation-type "Child"
Agile Process Configuration
# Agile process states:
# User Story: New โ Active โ Resolved โ Closed
# Task: New โ Active โ Closed
# Bug: New โ Active โ Resolved โ Closed
# Kanban board columns:
# - New
# - Approved
# - Committed
# - In Progress
# - Done
# Sprint planning:
# - Create sprints (iterations)
# - Assign work items to sprints
# - Set sprint capacity
# - Track sprint progress
Hour 5-6 Summary
You've learned:
- โ
Azure Boards work item management
- โ
Agile process configuration
- โ
Sprint planning and tracking
- โ
Kanban board usage
Hour 7-8: Azure Pipelines - CI/CD Basics
Azure Pipelines Overview
Azure Pipelines automatically builds and tests code projects and makes them available to others. It supports any language and platform and can deploy to any cloud or on-premises environment.
Pipeline Concepts
- Pipeline: Defines the CI/CD process
- Stage: Logical boundary in the pipeline
- Job: Collection of steps that run sequentially
- Step: Individual task in a job
- Agent: Compute resource that runs the pipeline
- Artifact: Output of a build process
Creating Your First Pipeline
# azure-pipelines.yml
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
variables:
buildConfiguration: 'Release'
stages:
- stage: Build
displayName: 'Build stage'
jobs:
- job: Build
displayName: 'Build job'
steps:
- task: UseDotNet@2
displayName: 'Use .NET Core SDK'
inputs:
packageType: 'sdk'
version: '6.x'
- task: DotNetCoreCLI@2
displayName: 'Restore packages'
inputs:
command: 'restore'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
displayName: 'Build application'
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration)'
- task: DotNetCoreCLI@2
displayName: 'Run tests'
inputs:
command: 'test'
projects: '**/*Tests.csproj'
arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'
- task: DotNetCoreCLI@2
displayName: 'Publish application'
inputs:
command: 'publish'
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
displayName: 'Publish artifacts'
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'drop'
Hour 7-8 Summary
You've mastered:
- โ
Azure Pipelines concepts and terminology
- โ
YAML pipeline syntax
- โ
Creating basic CI pipeline
- โ
Build and test automation
Hour 9-10: Build Pipelines & Automation
Advanced Build Pipeline Features
# Multi-stage pipeline with conditions
trigger:
- main
- develop
pool:
vmImage: 'ubuntu-latest'
variables:
buildConfiguration: 'Release'
isMain: $[eq(variables['Build.SourceBranch'], 'refs/heads/main')]
stages:
- stage: Build
displayName: 'Build and Test'
jobs:
- job: BuildJob
steps:
- task: NodeTool@0
inputs:
versionSpec: '16.x'
- script: |
npm install
npm run build
npm run test
displayName: 'Install, Build, and Test'
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '**/test-results.xml'
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: 'Cobertura'
summaryFileLocation: '**/coverage/cobertura-coverage.xml'
- stage: Security
displayName: 'Security Scan'
dependsOn: Build
condition: succeeded()
jobs:
- job: SecurityScan
steps:
- task: SonarCloudPrepare@1
inputs:
SonarCloud: 'SonarCloud'
organization: 'your-org'
scannerMode: 'CLI'
- task: SonarCloudAnalyze@1
- task: SonarCloudPublish@1
- stage: Deploy
displayName: 'Deploy to Staging'
dependsOn: Security
condition: and(succeeded(), eq(variables.isMain, true))
jobs:
- deployment: DeployToStaging
environment: 'staging'
strategy:
runOnce:
deploy:
steps:
- download: current
artifact: drop
- task: AzureWebApp@1
inputs:
azureSubscription: 'Azure Service Connection'
appType: 'webApp'
appName: 'myapp-staging'
package: '$(Pipeline.Workspace)/drop/**/*.zip'
Pipeline Templates and Reusability
# templates/build-template.yml
{{ 'parameters:' }}
{{ '- name: buildConfiguration' }}
type: string
default: 'Release'
{{ '- name: projectPath' }}
type: string
steps:
- task: DotNetCoreCLI@2
displayName: 'Restore'
inputs:
command: 'restore'
projects: '{{ '${{ parameters.projectPath }}' }}'
- task: DotNetCoreCLI@2
displayName: 'Build'
inputs:
command: 'build'
projects: '{{ '${{ parameters.projectPath }}' }}'
arguments: '{{ '--configuration ${{ parameters.buildConfiguration }}' }}'
# Main pipeline using template
stages:
- stage: Build
jobs:
- job: BuildAPI
steps:
- template: templates/build-template.yml
parameters:
projectPath: 'src/API/*.csproj'
buildConfiguration: 'Release'
Hour 9-10 Summary
You've learned:
- โ
Advanced pipeline features and conditions
- โ
Multi-stage pipeline design
- โ
Pipeline templates and reusability
- โ
Security scanning integration
Hour 11-12: Release Pipelines & Deployment
Release Pipeline Concepts
Release pipelines define the process for deploying applications to different environments. They can be created using classic editor or YAML multi-stage pipelines.
Environment Management
# Create environments via CLI
az pipelines environment create --name "Development" --project "MyFirstProject"
az pipelines environment create --name "Staging" --project "MyFirstProject"
az pipelines environment create --name "Production" --project "MyFirstProject"
# List environments
az pipelines environment list --project "MyFirstProject"
Deployment Strategies
# Blue-Green Deployment
- stage: BlueGreenDeploy
jobs:
- deployment: DeployBlue
environment: 'production'
strategy:
blueGreen:
deploy:
steps:
- task: AzureWebApp@1
inputs:
azureSubscription: 'Azure'
appName: 'myapp-blue'
slotName: 'staging'
# Canary Deployment
- stage: CanaryDeploy
jobs:
- deployment: DeployCanary
environment: 'production'
strategy:
canary:
increments: [10, 25, 50, 100]
deploy:
steps:
- task: Kubernetes@1
inputs:
command: 'apply'
arguments: '-f canary-deployment.yaml'
# Rolling Deployment
- stage: RollingDeploy
jobs:
- deployment: DeployRolling
environment: 'production'
strategy:
rolling:
maxParallel: 2
deploy:
steps:
- task: IISWebAppManagementOnMachineGroup@0
inputs:
IISDeploymentType: 'IISWebsite'
ActionIISWebsite: 'CreateOrUpdateWebsite'
Hour 11-12 Summary
You've mastered:
- โ
Release pipeline creation and management
- โ
Environment configuration
- โ
Advanced deployment strategies
- โ
Approval and gate processes
Hour 13-14: Azure Test Plans & Quality Assurance
Test Plans Overview
Azure Test Plans provides rich and powerful tools for testing your applications, including manual testing, exploratory testing, and user acceptance testing.
Creating Test Plans and Test Cases
# Create test plan via CLI (requires extension)
az boards work-item create --title "User Authentication Test Plan" --type "Test Plan" --project "MyFirstProject"
# Create test case
az boards work-item create --title "Login with valid credentials" --type "Test Case" --project "MyFirstProject"
Automated Testing Integration
# Automated test execution in pipeline
- task: VSTest@2
displayName: 'Run Unit Tests'
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
**\*Tests.dll
!**\*TestAdapter.dll
!**\obj\**
searchFolder: '$(System.DefaultWorkingDirectory)'
resultsFolder: '$(Agent.TempDirectory)\TestResults'
codeCoverageEnabled: true
testRunTitle: 'Unit Tests'
- task: DotNetCoreCLI@2
displayName: 'Run Integration Tests'
inputs:
command: 'test'
projects: '**/*IntegrationTests.csproj'
arguments: '--configuration $(buildConfiguration) --logger trx --results-directory $(Agent.TempDirectory)/TestResults'
- task: PublishTestResults@2
displayName: 'Publish Test Results'
condition: succeededOrFailed()
inputs:
testResultsFormat: 'VSTest'
testResultsFiles: '**/*.trx'
searchFolder: '$(Agent.TempDirectory)/TestResults'
mergeTestResults: true
testRunTitle: 'All Tests'
Hour 13-14 Summary
You've learned:
- โ
Test plan creation and management
- โ
Manual and automated testing
- โ
Test result reporting
- โ
Quality gates and metrics
Hour 15-16: Azure Artifacts & Package Management
Azure Artifacts Overview
Azure Artifacts allows you to create, host, and share packages with your team. It supports multiple package types including NuGet, npm, Python, Maven, and Universal packages.
Creating and Managing Feeds
# Create artifact feed
az artifacts feed create --name "MyCompanyFeed" --description "Internal package feed" --project "MyFirstProject"
# List feeds
az artifacts feed list --project "MyFirstProject"
# Set feed permissions
az artifacts feed permission add --feed "MyCompanyFeed" --group "Contributors" --role "contributor" --project "MyFirstProject"
Publishing Packages
# Publishing NuGet packages in pipeline
- task: NuGetCommand@2
displayName: 'Pack NuGet Package'
inputs:
command: 'pack'
packagesToPack: '**/*.csproj'
versioningScheme: 'byBuildNumber'
- task: NuGetCommand@2
displayName: 'Push to Feed'
inputs:
command: 'push'
packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg'
nuGetFeedType: 'internal'
publishVstsFeed: 'MyFirstProject/MyCompanyFeed'
# Publishing npm packages
- task: Npm@1
displayName: 'npm install'
inputs:
command: 'install'
- task: Npm@1
displayName: 'npm publish'
inputs:
command: 'publish'
publishRegistry: 'useFeed'
publishFeed: 'MyFirstProject/MyCompanyFeed'
Hour 15-16 Summary
You've learned:
- โ
Azure Artifacts feed creation and management
- โ
Package publishing and consumption
- โ
Feed security and permissions
- โ
Multi-format package support
Hour 17-18: Infrastructure as Code & ARM Templates
Infrastructure as Code Concepts
Infrastructure as Code (IaC) allows you to manage and provision infrastructure through code rather than manual processes. Azure supports ARM templates, Bicep, and Terraform.
ARM Template Example
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"webAppName": {
"type": "string",
"metadata": {
"description": "Name of the web app"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"variables": {
"appServicePlanName": "[concat(parameters('webAppName'), '-plan')]"
},
"resources": [
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2021-02-01",
"name": "[variables('appServicePlanName')]",
"location": "[parameters('location')]",
"sku": {
"name": "F1",
"tier": "Free"
}
},
{
"type": "Microsoft.Web/sites",
"apiVersion": "2021-02-01",
"name": "[parameters('webAppName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]"
],
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]"
}
}
]
}
Deploying Infrastructure via Pipeline
# Infrastructure deployment stage
- stage: Infrastructure
displayName: 'Deploy Infrastructure'
jobs:
- job: DeployInfra
steps:
- task: AzureResourceManagerTemplateDeployment@3
displayName: 'Deploy ARM Template'
inputs:
deploymentScope: 'Resource Group'
azureResourceManagerConnection: 'Azure Service Connection'
subscriptionId: '$(subscriptionId)'
action: 'Create Or Update Resource Group'
resourceGroupName: '$(resourceGroupName)'
location: 'East US'
templateLocation: 'Linked artifact'
csmFile: 'infrastructure/azuredeploy.json'
csmParametersFile: 'infrastructure/azuredeploy.parameters.json'
overrideParameters: '-webAppName $(webAppName)'
deploymentMode: 'Incremental'
Hour 17-18 Summary
You've mastered:
- โ
Infrastructure as Code principles
- โ
ARM template creation and deployment
- โ
Pipeline integration for infrastructure
- โ
Resource management best practices
Hour 19-20: Monitoring & Analytics
Azure DevOps Analytics
Azure DevOps provides built-in analytics and reporting capabilities to track project progress, team performance, and pipeline efficiency.
Pipeline Analytics
# Key metrics to monitor:
# - Build success rate
# - Build duration trends
# - Deployment frequency
# - Lead time for changes
# - Mean time to recovery
# - Change failure rate
# Custom dashboard widgets:
# - Build history
# - Release pipeline overview
# - Test results trend
# - Work item burndown
# - Code coverage
Application Insights Integration
# Add Application Insights to pipeline
- task: AzureCLI@2
displayName: 'Configure Application Insights'
inputs:
azureSubscription: 'Azure Service Connection'
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
az monitor app-insights component create \
--app $(appInsightsName) \
--location $(location) \
--resource-group $(resourceGroupName) \
--application-type web
# Get instrumentation key
instrumentationKey=$(az monitor app-insights component show \
--app $(appInsightsName) \
--resource-group $(resourceGroupName) \
--query instrumentationKey -o tsv)
echo "##vso[task.setvariable variable=instrumentationKey]$instrumentationKey"
Hour 19-20 Summary
You've learned:
- โ
Azure DevOps analytics and reporting
- โ
Pipeline monitoring and metrics
- โ
Application Insights integration
- โ
Custom dashboard creation
Hour 21-22: Security & Compliance
Security Best Practices
Azure DevOps Security Principles:
- Use service connections for external resources
- Implement least privilege access
- Enable audit logging
- Use Azure Key Vault for secrets
- Implement branch protection policies
- Regular security scanning
Secret Management
# Using Azure Key Vault in pipeline
- task: AzureKeyVault@2
displayName: 'Get secrets from Key Vault'
inputs:
azureSubscription: 'Azure Service Connection'
KeyVaultName: '$(keyVaultName)'
SecretsFilter: 'DatabaseConnectionString,ApiKey'
RunAsPreJob: true
# Using variable groups
variables:
- group: 'Production-Secrets'
- name: 'environment'
value: 'production'
# Reference secrets in tasks
- task: AzureWebApp@1
inputs:
azureSubscription: 'Azure Service Connection'
appName: '$(webAppName)'
appSettings: |
-ConnectionStrings:DefaultConnection "$(DatabaseConnectionString)"
-ApiSettings:Key "$(ApiKey)"
Hour 21-22 Summary
You've mastered:
- โ
Security best practices implementation
- โ
Secret and credential management
- โ
Compliance and audit capabilities
- โ
Access control and permissions
Hour 23-24: Complete DevOps Project Implementation
Final Project: End-to-End DevOps Pipeline
Let's implement a complete DevOps workflow that incorporates everything we've learned about Azure DevOps.
# Complete azure-pipelines.yml for production-ready application
trigger:
branches:
include:
- main
- develop
paths:
exclude:
- docs/*
- README.md
variables:
- group: 'Production-Variables'
- name: 'buildConfiguration'
value: 'Release'
- name: 'vmImageName'
value: 'ubuntu-latest'
stages:
- stage: Build
displayName: 'Build and Test'
jobs:
- job: Build
displayName: 'Build job'
pool:
vmImage: $(vmImageName)
steps:
- task: UseDotNet@2
displayName: 'Use .NET SDK'
inputs:
packageType: 'sdk'
version: '6.x'
- task: DotNetCoreCLI@2
displayName: 'Restore packages'
inputs:
command: 'restore'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
displayName: 'Build application'
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration)'
- task: DotNetCoreCLI@2
displayName: 'Run unit tests'
inputs:
command: 'test'
projects: '**/*UnitTests.csproj'
arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage" --logger trx'
- task: PublishTestResults@2
displayName: 'Publish test results'
condition: succeededOrFailed()
inputs:
testResultsFormat: 'VSTest'
testResultsFiles: '**/*.trx'
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage'
inputs:
codeCoverageTool: 'Cobertura'
summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
- task: DotNetCoreCLI@2
displayName: 'Publish application'
inputs:
command: 'publish'
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)'
zipAfterPublish: true
- task: PublishBuildArtifacts@1
displayName: 'Publish artifacts'
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'drop'
- stage: Security
displayName: 'Security and Quality Gates'
dependsOn: Build
condition: succeeded()
jobs:
- job: SecurityScan
displayName: 'Security scanning'
pool:
vmImage: $(vmImageName)
steps:
- task: SonarCloudPrepare@1
displayName: 'Prepare SonarCloud analysis'
inputs:
SonarCloud: 'SonarCloud'
organization: 'your-org'
scannerMode: 'MSBuild'
projectKey: 'your-project-key'
- task: DotNetCoreCLI@2
displayName: 'Build for analysis'
inputs:
command: 'build'
projects: '**/*.csproj'
- task: SonarCloudAnalyze@1
displayName: 'Run SonarCloud analysis'
- task: SonarCloudPublish@1
displayName: 'Publish SonarCloud results'
- stage: Infrastructure
displayName: 'Deploy Infrastructure'
dependsOn: Security
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
jobs:
- job: DeployInfrastructure
displayName: 'Deploy Azure resources'
pool:
vmImage: $(vmImageName)
steps:
- task: AzureResourceManagerTemplateDeployment@3
displayName: 'Deploy ARM template'
inputs:
deploymentScope: 'Resource Group'
azureResourceManagerConnection: 'Azure-Production'
subscriptionId: '$(subscriptionId)'
action: 'Create Or Update Resource Group'
resourceGroupName: '$(resourceGroupName)'
location: 'East US'
templateLocation: 'Linked artifact'
csmFile: 'infrastructure/main.json'
csmParametersFile: 'infrastructure/parameters.prod.json'
deploymentMode: 'Incremental'
- stage: DeployStaging
displayName: 'Deploy to Staging'
dependsOn: Infrastructure
condition: succeeded()
jobs:
- deployment: DeployToStaging
displayName: 'Deploy to staging environment'
environment: 'staging'
pool:
vmImage: $(vmImageName)
strategy:
runOnce:
deploy:
steps:
- task: AzureKeyVault@2
displayName: 'Get secrets from Key Vault'
inputs:
azureSubscription: 'Azure-Production'
KeyVaultName: '$(keyVaultName)'
SecretsFilter: '*'
- task: AzureWebApp@1
displayName: 'Deploy to Azure Web App'
inputs:
azureSubscription: 'Azure-Production'
appType: 'webApp'
appName: '$(webAppName)-staging'
package: '$(Pipeline.Workspace)/drop/**/*.zip'
appSettings: |
-ASPNETCORE_ENVIRONMENT "Staging"
-ConnectionStrings:DefaultConnection "$(DatabaseConnectionString)"
- stage: IntegrationTests
displayName: 'Integration Tests'
dependsOn: DeployStaging
condition: succeeded()
jobs:
- job: RunIntegrationTests
displayName: 'Run integration tests'
pool:
vmImage: $(vmImageName)
steps:
- task: DotNetCoreCLI@2
displayName: 'Run integration tests'
inputs:
command: 'test'
projects: '**/*IntegrationTests.csproj'
arguments: '--configuration $(buildConfiguration) --logger trx'
env:
TestEnvironmentUrl: 'https://$(webAppName)-staging.azurewebsites.net'
- stage: DeployProduction
displayName: 'Deploy to Production'
dependsOn: IntegrationTests
condition: succeeded()
jobs:
- deployment: DeployToProduction
displayName: 'Deploy to production environment'
environment: 'production'
pool:
vmImage: $(vmImageName)
strategy:
blueGreen:
deploy:
steps:
- task: AzureWebApp@1
displayName: 'Deploy to production slot'
inputs:
azureSubscription: 'Azure-Production'
appType: 'webApp'
appName: '$(webAppName)'
slotName: 'staging'
package: '$(Pipeline.Workspace)/drop/**/*.zip'
appSettings: |
-ASPNETCORE_ENVIRONMENT "Production"
-ConnectionStrings:DefaultConnection "$(ProductionDatabaseConnectionString)"
routeTraffic:
steps:
- task: AzureAppServiceManage@0
displayName: 'Swap staging to production'
inputs:
azureSubscription: 'Azure-Production'
action: 'Swap Slots'
webAppName: '$(webAppName)'
resourceGroupName: '$(resourceGroupName)'
sourceSlot: 'staging'
Final Challenge: Complete DevOps Implementation
Implement a full DevOps workflow:
- Set up complete Azure DevOps organization and project
- Configure all services (Repos, Boards, Pipelines, Test Plans, Artifacts)
- Implement multi-stage CI/CD pipeline
- Set up infrastructure as code
- Configure monitoring and alerting
- Implement security and compliance measures
- Create comprehensive documentation
- Train team members on the workflow
Hour 23-24 Summary
Congratulations! You've implemented a complete professional DevOps workflow with:
- โ
End-to-end CI/CD pipeline implementation
- โ
Multi-environment deployment strategy
- โ
Security and quality gates
- โ
Infrastructure as code deployment
- โ
Monitoring and analytics integration
- โ
Professional DevOps practices
๐ฏ Resources & Next Steps
Congratulations! ๐
You've successfully completed the 24-hour Azure DevOps learning journey! You now have the skills to implement professional DevOps practices and can confidently manage the entire software development lifecycle with Azure DevOps.
What You've Accomplished
Amazing Progress! In just 24 hours, you've learned:
- Complete Azure DevOps platform mastery
- Version control and collaboration with Azure Repos
- Agile project management with Azure Boards
- Advanced CI/CD pipelines with Azure Pipelines
- Quality assurance with Azure Test Plans
- Package management with Azure Artifacts
- Infrastructure as Code with ARM templates
- Monitoring, security, and compliance practices
- End-to-end DevOps workflow implementation
Next Steps for Continued Learning
Immediate Next Steps (Week 1-2)
- Practice Daily: Use Azure DevOps for all your projects
- Experiment: Try advanced features and integrations
- Join Communities: Azure DevOps and DevOps forums
- Certifications: Consider Azure DevOps Engineer Expert certification
Intermediate Topics (Month 1-3)
- Advanced pipeline patterns and templates
- Multi-cloud and hybrid deployments
- Advanced security and compliance features
- Custom extensions and marketplace integrations
- Advanced monitoring and analytics
Advanced Topics (Month 3-6)
- Enterprise-scale DevOps implementations
- Custom Azure DevOps extensions development
- Advanced automation and scripting
- DevOps culture and organizational transformation
- Site Reliability Engineering (SRE) practices
Recommended Resources
Official Documentation
Learning Paths and Certifications
Community and Tools
Azure DevOps Quick Reference
# Essential Azure CLI DevOps Commands
az devops configure --defaults organization=https://dev.azure.com/myorg project=myproject
# Projects
az devops project create --name "MyProject"
az devops project list
# Repositories
az repos create --name "MyRepo"
az repos list
# Pipelines
az pipelines create --name "MyPipeline" --yml-path azure-pipelines.yml
az pipelines run --name "MyPipeline"
az pipelines list
# Work Items
az boards work-item create --title "New Feature" --type "User Story"
az boards work-item list
# Artifacts
az artifacts feed create --name "MyFeed"
az artifacts feed list
Remember: Azure DevOps is constantly evolving with new features and improvements. Stay updated with the latest releases and best practices. Always test changes in non-production environments first.
Final Tips for Success
- Start Small: Begin with basic pipelines and gradually add complexity
- Automate Everything: If you do it more than once, automate it
- Monitor and Measure: Track metrics to improve your processes
- Security First: Always consider security in your DevOps practices
- Collaborate: DevOps is about culture, not just tools
- Continuous Learning: Stay updated with new features and practices
- Document Everything: Good documentation is crucial for team success
- Fail Fast: Learn from failures and iterate quickly
You're Now an Azure DevOps Expert! You have the foundation to implement professional DevOps practices in any organization. Azure DevOps is a powerful platform - use it to transform how your team builds, tests, and deploys software!