Learning Azure DevOps in 24 Hours

Your complete guide to mastering modern DevOps practices with Microsoft Azure

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

# Step 1: Create Azure DevOps Organization # Visit https://dev.azure.com # Sign in with Microsoft account # Create new organization: https://dev.azure.com/{your-org-name} # Step 2: Install Azure CLI and DevOps extension # Install Azure CLI from https://docs.microsoft.com/en-us/cli/azure/install-azure-cli az --version # Install Azure DevOps extension az extension add --name azure-devops # Login to Azure az login # Set default organization az devops configure --defaults organization=https://dev.azure.com/{your-org-name}

Exercise 1.1: Azure DevOps Setup

Complete your Azure DevOps environment setup:

  1. Create Azure DevOps organization
  2. Install Azure CLI and DevOps extension
  3. Create your first project
  4. Configure user permissions
  5. 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:

  1. Set up complete Azure DevOps organization and project
  2. Configure all services (Repos, Boards, Pipelines, Test Plans, Artifacts)
  3. Implement multi-stage CI/CD pipeline
  4. Set up infrastructure as code
  5. Configure monitoring and alerting
  6. Implement security and compliance measures
  7. Create comprehensive documentation
  8. 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!
Wesley Classen
Wesley's AI Assistant Usually replies in ~15 min Ask me anything โ€” if I can't answer, Wesley gets pinged and replies personally.
Hello! I'm Wesley's AI assistant. How can I help you today?