Blog
Mert Özen's blog posts on software development, backend, frontend, and DevOps.
What Is Azure DevOps Pipelines? Organization, Project, YAML Pipelines and Your First CI Run
Azure Pipelines is the Azure DevOps CI/CD service that runs a YAML file in a project on triggers and executes its jobs on agents; the hierarchy is pipeline, stage, job and step. We write a first pipeline that restores, builds and runs Bookstore's SQL Server integration tests, and cover why Azure Repos validates pull requests through branch policies, the GitHub App connection and a GitHub Actions mapping.
Variables, Parameters and Expressions in Azure Pipelines: ${{ }}, $( ) and $[ ] Explained
In Azure Pipelines ${{ }} is evaluated while the file is processed, $( ) right before each task and $[ ] when a job or stage starts; the form you pick decides whether the value exists at that moment. We compute Bookstore's version in one job and pass it on as an output, and cover why secrets don't reach the environment on their own, runtime parameters, variable groups and CI, scheduled and pipeline completion triggers.
Azure Pipelines Templates: Building Shared Pipelines with Step, Job, Stage and extends Templates
Azure Pipelines templates let you reuse YAML at step, job, stage and variable level; an extends template centralizes the pipeline's skeleton and becomes binding through a required template check. We move Bookstore's .NET and Angular job templates into a separate pipeline-templates repository pinned to a tag, and build a skeleton that uses each and conditional insertion to block inline scripts and makes an audit job mandatory.
.NET + Angular CI with Azure Pipelines: UseDotNet, NuGet Cache, Test Results, Coverage and Pipeline Artifacts
.NET and Angular CI in Azure Pipelines is built with Cache@2 keyed on lock files, PublishTestResults@2 for TRX and JUnit, PublishCodeCoverageResults@2 for Cobertura and PublishPipelineArtifact@1 between jobs. We add these to Bookstore's templates and cover DotNetCoreCLI@2 appending --report-trx under Microsoft.Testing.Platform, --locked-mode, and a job that combines the api and web output into one release package.
Azure Artifacts Feeds: Publishing NuGet and npm Packages, Upstream Sources and Views
An Azure Artifacts feed stores NuGet and npm packages as immutable versions, serves nuget.org and npmjs from one address through upstream sources, and uses views to decide which versions consumers see. We publish Bookstore's contracts package with NuGetAuthenticate@1 and dotnet nuget push, point CI restore at the feed, and cover build identity roles, promotion, retention and the roadmap status of the old Artifacts tasks.
Environments, Approvals and Checks: Building a Release Process in YAML with Deployment Jobs
In Azure Pipelines, approvals and checks are defined on resources such as environments, not in the YAML, so whoever edits the pipeline file can't bypass them. We add dev, staging and production stages with deployment jobs to Bookstore, verify the release artifact, and cover the order of checks, going to production only from main with an approval, and the classic release counterparts.
Passwordless Deploys to Azure with Azure Pipelines: Workload Identity Federation, App Service Slots and EF Core Migration Bundles
With workload identity federation, an Azure service connection works without storing any secret: Azure DevOps issues an OIDC token, and Entra ID matches it to a federated credential and returns an access token. We deploy Bookstore to an App Service staging slot through connections limited to a resource group, run a smoke test and a swap, apply the migration bundle with a connection string from Key Vault, and cover the 2027 retirement of the Azure DevOps issuer.
Azure Pipelines Agents and Security: Microsoft-Hosted, Self-Hosted, Managed DevOps Pools and Protected Resources
A Microsoft-hosted agent gives you a fresh machine for every job, but the free tier has a single parallel job and a 60-minute limit; for more you need self-hosted agents or Managed DevOps Pools. We build a one-job container agent for Bookstore and cover the image calendar, job authorization scope, protected resources, restricting variables with settableVariables, and the removal dates of the Node.js runners.
Migrating from Classic Release Pipelines to YAML and What Changed in Azure Pipelines from 2023 to 2026
Classic release pipelines can't be exported to YAML; builds start from Export to YAML, while releases are rebuilt by hand with stages, checks and templates. For Bookstore we turn a task group into a step template and redeploying an old release into a pipeline with a pipeline resource, disable classic creation, and collect the 2023–2026 changes, the roadmap and the decision to stay on Azure DevOps, with dates.