Presented at VSLive San Diego 2025
Just got back from an amazing week at VSLive San Diego 2025 where I had the opportunity to share one of my favorite topics: building modern CI/CD pipelines using Azure DevOps YAML. For those who attended (and anyone else interested in modernizing their deployment processes), I wanted to share the materials and a comprehensive demo application that showcases real-world patterns you can use today.
Session Overview
The session focused on moving beyond classic Azure DevOps pipelines to embrace YAML-based pipelines that live alongside your code. We explored why "pipeline as code" isn't just a buzzword, but a fundamental shift in how we should think about CI/CD.
Key Topics Covered
- YAML Pipeline Fundamentals: Understanding stages, jobs, and steps
- Version Control Integration: Why storing pipelines in Git changes everything
- Multi-Stage Deployments: Building once, deploying everywhere
- Docker Integration: Using containers for consistent testing environments
- Database Deployments: Automating EF Core migrations
- Approval Gates: Adding human checkpoints between environments
- Azure Integration: Deploying to App Service with deployment slots
The Demo Application
To illustrate these concepts, I built a complete .NET 9 web application with a sophisticated deployment pipeline. This isn't just a "Hello World" example – it's a production-ready pattern that includes:
Application Architecture
- ASP.NET Core MVC web application
- Entity Framework Core with SQL Azure
- Multi-project solution structure with proper separation of concerns
- Comprehensive unit and integration test coverage
Pipeline Features
The real magic happens in the azure-pipelines.yml
file, which orchestrates a complete deployment workflow:
- Verify Stage: Validates environment connectivity before any deployments
- Build Stage: Compiles, tests (with Docker-based SQL Server), and packages artifacts
- Deploy to Test: Deploys to a test slot with database migrations
- Manual Approval Gate: Pauses for human validation
- Deploy to Production: Blue-green deployment using slot swapping
Infrastructure as Code
The solution includes Bicep templates that define all required Azure resources:
- Azure SQL Server with Azure AD authentication
- Separate test and production databases
- App Service with deployment slots
- Security configurations including managed identity
Why YAML Pipelines Matter
During the session, I emphasized a crucial point that often gets overlooked: pipeline scripts stored in version control fundamentally change how we work. Here's why:
Evolution in Tandem
Your code and your pipeline evolve together. When you need a new dependency, change your build process, or add a deployment step, those changes are versioned right alongside the code changes that require them.
Branching and Merging
Need to experiment with a new deployment strategy? Create a branch. Want to test pipeline changes before they hit production? Use a pull request. This simply isn't possible with classic pipelines stored in Azure DevOps.
Historical Context
Six months from now, when you need to understand why a deployment worked (or didn't), you have the complete picture in one place. The code, the tests, the infrastructure definition, and the deployment process – all versioned together.
Key Takeaways
Start with YAML: If you're still using classic pipelines, make the switch. The initial learning curve pays dividends quickly.
Use Service Connections Properly: Don't embed credentials. Use Azure service connections and managed identities.
Test Everything Locally: The demo uses Docker to run SQL Server locally, matching what happens in the pipeline. This dramatically reduces debugging time.
Embrace Multi-Stage: Don't just build and deploy. Add verification, testing, and approval stages to catch issues early.
Version Your Infrastructure: The Bicep templates in the demo ensure your infrastructure is reproducible and versioned.
Resources
Download the Presentation: Download PowerPoint Slides
Get the Code: Sample Code
Tools Mentioned:
- Azure DevOps Utilities (azdoutil) - Free command-line tools for Azure DevOps
- Solution Utilities (slnutil) - Utilities for managing .NET solutions
Running the Demo Yourself
The complete demo application is available on GitHub with detailed setup instructions. To get started:
- Extract the code zip file
- Deploy the infrastructure using the provided Bicep template
- Configure your Azure DevOps pipeline variables
- Run the pipeline and watch the magic happen
The README includes step-by-step instructions for both cloud deployment and local development.
Questions?
Feel free to reach out with questions or if you need help implementing these patterns in your organization:
- Email: benday@benday.com
- Twitter: @benday
- Web: www.benday.com
Thanks to everyone who attended the session at VSLive San Diego 2025! It was great connecting with so many passionate developers and DevOps practitioners. Special thanks to the VSLive team for putting together another fantastic event.
-Ben
Benjamin Day is a consultant, trainer, author, and Microsoft MVP specializing in Azure DevOps, Scrum, and software architecture. He's the president of Benjamin Day Consulting and creator of SlideSpeaker.ai.