Roadmap › Azure DevOps & CI/CD › Module: Azure Pipelines
Lessons in this course (10)

3. YAML pipeline structure

Basic★ Must knowLesson 3 of 10
yaml
# azure-pipelines.yml
trigger:
  branches: { include: [main] }
  paths: { exclude: [docs/*, README.md] }
pr:
  branches: { include: [main] }

pool:
  vmImage: ubuntu-latest

variables:
  buildConfiguration: Release
  dotnetVersion: 10.0.x

stages:
- stage: Build
  jobs:
  - job: BuildTest
    steps:
    - task: UseDotNet@2
      inputs: { packageType: sdk, version: $(dotnetVersion) }
    - script: dotnet restore
      displayName: Restore
    - script: dotnet build --no-restore -c $(buildConfiguration)
      displayName: Build
    - script: dotnet test --no-build -c $(buildConfiguration) --logger trx --collect:"XPlat Code Coverage"
      displayName: Test
    - task: PublishTestResults@2
      condition: succeededOrFailed()
      inputs: { testResultsFormat: VSTest, testResultsFiles: '**/*.trx' }
    - script: dotnet publish src/Shop.Api -c $(buildConfiguration) -o $(Build.ArtifactStagingDirectory)/api
      displayName: Publish
    - publish: $(Build.ArtifactStagingDirectory)/api
      artifact: api

Hierarchy: Pipeline → Stages → Jobs → Steps (tasks or scripts). A job runs on one agent; jobs in a stage can run in parallel; stages run in order unless dependsOn says otherwise.