Let’s walk through a general-purpose Azure DevOps build pipeline template that can be applied to most common application types (web apps, APIs, microservices, etc.) using CI/CD best practices, excluding Azure Data Factory (ADF).
๐ก Goal: General Build Pipeline (CI) in Azure DevOps
This applies to:
- .NET, Java, Node.js, Python apps
- Microservices with Docker
- Infrastructure as Code (ARM, Bicep, Terraform)
- Any codebase where you want to build, test, and publish artifacts
โ Key Steps in a General Azure DevOps Build Pipeline
| Step | Stage | Purpose |
|---|---|---|
| 1 | Checkout | Pull latest code from Git |
| 2 | Restore/Resolve dependencies | Install NuGet/npm/pip packages |
| 3 | Compile/Build | Compile source code |
| 4 | Run Unit Tests | Ensure code quality and pass rate |
| 5 | Code Quality Check | SonarQube, ESLint, etc. |
| 6 | Package Artifacts | Zip, publish output (DLLs, WARs, images) |
| 7 | Publish Build Artifacts | Make them available for release pipeline |
| 8 | Optional: Build Docker image | For containerized apps |
๐งพ Sample Build YAML Templates by Type
๐น 1. .NET Core Web API/Service
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
buildConfiguration: 'Release'
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '6.x.x'
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
inputs:
command: 'build'
arguments: '--configuration $(buildConfiguration)'
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/*Tests.csproj'
arguments: '--configuration $(buildConfiguration) --collect:"Code coverage"'
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
๐น 2. Node.js Application
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
inputs:
versionSpec: '18.x'
displayName: 'Install Node.js'
- script: |
npm install
npm run build
displayName: 'Install dependencies and build'
- script: |
npm test
displayName: 'Run unit tests'
- task: CopyFiles@2
inputs:
SourceFolder: '$(Build.SourcesDirectory)'
Contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
๐น 3. Dockerized App (Any Language)
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
variables:
imageName: 'myapp'
steps:
- task: Docker@2
inputs:
containerRegistry: '<yourDockerRegistryServiceConnection>'
repository: '$(imageName)'
command: 'buildAndPush'
Dockerfile: '**/Dockerfile'
tags: |
$(Build.BuildId)
๐น Use this if you plan to deploy via Kubernetes, Azure Container Apps, or App Services with containers.
๐น 4. Terraform Infrastructure Pipeline
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: TerraformInstaller@1
inputs:
terraformVersion: '1.5.x'
- task: TerraformTaskV1@0
inputs:
provider: 'azurerm'
command: 'init'
backendServiceArm: '<serviceConnection>'
backendAzureRmResourceGroupName: '<rg>'
backendAzureRmStorageAccountName: '<storage>'
backendAzureRmContainerName: 'tfstate'
backendAzureRmKey: 'terraform.tfstate'
- task: TerraformTaskV1@0
inputs:
provider: 'azurerm'
command: 'validate'
- task: TerraformTaskV1@0
inputs:
provider: 'azurerm'
command: 'plan'
- task: TerraformTaskV1@0
inputs:
provider: 'azurerm'
command: 'apply'
environmentServiceNameAzureRM: '<serviceConnection>'
vars: '-var="env=dev"'
๐ง Tips for General Build Pipelines
| Tip | Description |
|---|---|
| ๐ Secure Secrets | Use Azure Key Vault or pipeline secrets |
| ๐งช Always Test | Add unit and integration tests |
| ๐ฏ Modularize | Keep reusable scripts in templates (YAML extends) |
| ๐ Reuse | Share artifacts across environments (Dev > QA > Prod) |
| ๐ Auto-trigger | Enable CI triggers or PR validation builds |
๐ Typical Build Output (Artifacts)
- Web app: DLLs, config files, web.config
- Node app: JS files,
dist/folder - Docker: Tagged images in registry
- Infra: Terraform plan,
.tfstatebackup
Category: