Skip to main content

ADO Pipeline Comparator — Azure DevOps Pipeline Comparison Tool

Open Source (MIT)
ADO Pipeline Comparator — Azure DevOps Pipeline Comparison Tool

Compare Azure DevOps Build and Release pipelines side-by-side across multiple ADO organizations. Connect via PAT (AES-256 encrypted), cache locally, compare stages, jobs, steps, variables, and triggers. Export to Excel and PDF. Docker or Windows EXE — no .NET required. Open Source MIT.

ADO Pipeline Comparator: Side-by-Side Azure DevOps Pipeline Comparison Across Multiple Organizations

Managing pipelines across multiple Azure DevOps organizations is complex. Teams maintaining the same deployment logic across several ADO tenants — or auditing pipeline consistency across projects — have no native tool to compare them. Engineers open tabs, manually inspect stages and steps, copy configurations into spreadsheets, and try to spot differences by eye. This is slow, error-prone, and doesn't scale.

The Challenge

Organizations running multiple Azure DevOps tenants — or teams responsible for pipeline governance — have no native ADO feature to compare pipeline definitions side-by-side. Spotting a missing step, a misconfigured variable, or a different trigger condition requires manual inspection across browser tabs. ADO Pipeline Comparator replaces this with a structured comparison UI and exportable reports.

The Solution: ADO Pipeline Comparator

ADO Pipeline Comparator is a standalone web application that connects to multiple Azure DevOps organizations simultaneously, caches their pipeline definitions locally in SQLite, and lets you select any 2 or more pipelines for structured side-by-side comparison. Collapsible comparison sections (Stages, Jobs, Steps, Variables, Triggers) cover both Build and Release pipeline types. Results export to Excel or PDF.

How It Works

  1. Connect — Add ADO organizations via PAT token. PATs are encrypted with AES-256 before storage — never saved in plaintext
  2. Load — Click Refresh to fetch pipeline definitions from all connected organizations into the local SQLite cache
  3. Browse — Use the advanced Pipelines table: search, filter, sort, and group by Organization → Project → Type
  4. Select — Check 2 or more pipelines using row checkboxes
  5. Compare — Click Compare to open the side-by-side view with collapsible sections and visual diff indicators
  6. Export — Download the full comparison as Excel (.xlsx) or PDF for audit records and stakeholder sharing
ADO Org 1  ↘
ADO Org 2  → [Cache → ADO Pipeline Comparator] → Select Pipelines → Side-by-Side Diff → Export
ADO Org 3  ↗

Key Capabilities

🔗

Multi-Org Connections

Connect to any number of Azure DevOps organizations simultaneously. PAT tokens stored AES-256 encrypted — never in plaintext. Test connection before saving. Manage organization visibility per site.

⚖️

Side-by-Side Comparison

Compare stages, jobs, steps, variables, and triggers across 2+ pipelines in collapsible sections. Differences are visually highlighted — spot missing steps, changed variables, or different triggers instantly.

📊

Advanced Pipeline Table

Full-featured data table: sorting, filtering, column grouping (Org → Project → Type), column reordering and visibility toggle, full-text search. Select pipelines for comparison with checkboxes.

📁

Export: Excel & PDF

Export the full comparison to Excel (.xlsx) for further analysis or to PDF for sharing with stakeholders, audit records, and compliance documentation.

💾

Local Pipeline Cache

Pipeline definitions are cached in a local SQLite database. Refresh on demand: all organizations, a single org, or a single pipeline. Offline comparison is possible after initial load.

🐳

Docker or Windows EXE

Run as a Docker container on any OS (Linux, macOS, Windows) or as a self-contained Windows EXE. No .NET installation required on the target machine. One command to start.

Supported Pipeline Types

Type Description Comparison Sections
Build (YAML) YAML-based pipeline definitions Stages, Jobs, Steps, Variables, Triggers
Build (Classic) Classic non-YAML build definitions Stages, Jobs, Steps, Variables, Triggers
Release (Classic) Classic release definitions with stages and environments Stages, Jobs, Steps, Variables, Triggers

🖥️ Application Pages

Page URL Description
Dashboard / Overview of connected organizations and pipeline stats
ADO Sites /sites Manage ADO organization connections (URL + PAT, test connection)
Organizations /organizations Browse and toggle ADO projects per site — show/hide from comparison
Pipelines /pipelines Full pipeline table: search, filter, group, refresh cache, select for comparison
Compare /compare Side-by-side comparison view with collapsible sections and Excel/PDF export

💼 Use Cases

⚙️ For DevOps Engineers

Quickly audit pipeline consistency across environments (dev, staging, production) or across customer tenants. Find a missing step, a wrong variable, or a trigger that's out of sync — without opening multiple browser tabs.

📋 For Release Managers

Verify that release pipelines across all environments are correctly configured before a deployment. Export comparison to PDF for sign-off and approval workflows. Maintain a documented audit trail of pipeline state.

🏗️ For Technical Delivery Managers

Enforce pipeline governance standards across multiple teams and projects. Use exported Excel reports for project reviews. Quickly onboard new ADO organizations and compare their pipelines against a reference standard.

🔍 For Audit & Compliance

Generate PDF reports of pipeline configuration comparisons for compliance records. Document the state of CI/CD pipelines at a point in time. PAT tokens stored encrypted — meeting security requirements for credential handling.

🏢 For ISVs & Multi-Tenant Deployments

ISVs maintaining identical pipelines across customer ADO organizations can quickly spot where configurations have drifted. Compare a customer's pipeline against the reference template to identify deviations before they cause issues.

🔄 For Pipeline Migrations

Migrating pipelines from one ADO organization to another? Use the comparator to verify the migrated pipeline matches the source definition step-by-step. Export a diff report to document what was migrated and what changed.

🔐 Security

🛡️

Encrypted Credentials

  • AES-256 PAT Encryption: Personal Access Tokens are stored AES-256 encrypted in the local SQLite database — never in plaintext
  • Encryption Key via Env Var: The AES key is provided through the ENCRYPTION_KEY environment variable — not hardcoded or stored in config files
  • Local-Only Storage: All data stays in a local SQLite file — no cloud sync, no external data transmission
  • Read-Only ADO Access: Only requires PAT with Read access to Pipelines — minimal permissions principle

⚡ Quick Start

🐳

Docker — Recommended

Option 1 — Docker run (single command):

docker run -d --name ado-pipeline-comparator \
-p 5000:8080 \
-v ado-data:/app/data \
-e ENCRYPTION_KEY=$(openssl rand -base64 32) \
vglu/ado-pipeline-comparator:latest

Option 2 — Docker Compose:

echo "ENCRYPTION_KEY=$(openssl rand -base64 32)" > .env
docker compose up -d

Open in browser:

http://localhost:5000

First steps:

  • • Go to ADO SitesAdd Site — enter your ADO organization URL and a PAT with Read access to Pipelines
  • • Click Test Connection to verify, then Save
  • • Go to Pipelines → click Refresh All to load pipeline definitions
  • • Select 2+ pipelines with checkboxes → click Compare

💻 Windows (Self-Contained EXE)

No Docker? Download the latest -win-x64.zip from GitHub Releases, extract, and run start.cmd. No .NET installation required — the runtime is embedded.

🛠️ Technical Stack

Core Technologies

  • 🔷 Blazor Server + MudBlazor 7.x — interactive UI (Material Design)
  • ⚙️ ASP.NET Core 8 (.NET 8 LTS)
  • 🗄️ SQLite + EF Core 8 — local pipeline cache
  • 🔗 Azure DevOps .NET Client Libraries — official Microsoft ADO SDK

Additional Libraries

  • 🔐 AES-256 encryption for PAT token storage
  • 📊 ClosedXML — Excel (.xlsx) export
  • 📄 QuestPDF — PDF generation
  • 🐳 Docker + Docker Compose support

🔧 Configuration

Configure via environment variables (Docker) or appsettings.json (development):

Variable Required Description
ENCRYPTION_KEY Yes AES-256 key for encrypting PAT tokens (min 16 chars, 32+ recommended)
DB_PATH No Full path to SQLite file inside container (default: /app/data/data.db)
ASPNETCORE_URLS No Bind address (default: http://0.0.0.0:8080)

Generate a secure key: openssl rand -base64 32 (Linux/macOS) or PowerShell: [Convert]::ToBase64String([Security.Cryptography.RandomNumberGenerator]::GetBytes(32))

💡 Why This Matters

Azure DevOps is the backbone of CI/CD for thousands of Microsoft-ecosystem teams. But as organizations grow — multiple ADO tenants, multiple projects, multiple teams — pipelines inevitably drift. A step gets added to one pipeline but not another. A variable is updated in staging but forgotten in production. A trigger condition is different between customer environments.

Without a dedicated comparison tool, this drift is invisible until something breaks.

ADO Pipeline Comparator gives you visibility into pipeline configuration differences before they become incidents:

  • Consistency check — verify all environment pipelines match the reference configuration
  • Migration validation — confirm a migrated pipeline matches the source definition
  • Governance reporting — export to Excel or PDF for project reviews and compliance
  • Multi-tenant management — monitor pipeline state across all customer organizations from one tool

❓ Frequently Asked Questions

Can I compare pipelines from different Azure DevOps organizations?
Yes, that's the core use case. Add multiple ADO organizations via PAT tokens on the ADO Sites page. After refreshing the pipeline cache, pipelines from all connected organizations appear in a single table. Select any 2+ pipelines — from the same or different organizations — and compare them side-by-side.

What pipeline types are supported — YAML, Classic Build, Classic Release?
All three types are supported: YAML-based pipelines, Classic (non-YAML) Build definitions, and Classic Release definitions with stages and environments. All types appear in the same Pipelines table and can be selected for comparison.

Are PAT tokens stored securely?
Yes. PAT tokens are encrypted with AES-256 before being stored in the local SQLite database — they are never saved in plaintext. The encryption key is provided via the ENCRYPTION_KEY environment variable and is not stored anywhere in the application. Only Read access to Pipelines is required — minimal permissions.

How do I export comparison results to Excel or PDF?
On the Compare page, after viewing the side-by-side comparison, use the Export buttons to download the results as Excel (.xlsx) or PDF. The Excel export is useful for further analysis and filtering; the PDF is ideal for stakeholder sharing, approval workflows, and audit records.

Does it work without Docker? What are the requirements?
Yes. Download the self-contained Windows build from GitHub Releases — no .NET installation required. Extract the ZIP and run start.cmd. For Docker, the container runs on any OS (Linux, macOS, Windows) and includes everything needed.

How many pipelines or organizations can I connect?
There is no hard limit on the number of connected ADO organizations or cached pipelines. Performance depends on your machine resources. Organizations and projects can be shown or hidden individually from the Organizations page to keep the Pipelines view focused.

Is pipeline data sent to any external service?
No. All pipeline definitions are fetched directly from Azure DevOps via the official ADO .NET Client Libraries and stored only in the local SQLite database. No telemetry, no external sync, no cloud storage. The tool runs entirely on your own infrastructure.

📞 Contact & Support

For questions, feature requests, or contributions:


🚀

Open Source — MIT License

ADO Pipeline Comparator is free, open-source software by SIMS tech. Source code, issues, and contributions: github.com/vglu/ADOPipelineComparator.

🔗 Resources

📂

GitHub Repository

Explore the complete source code, documentation, and latest releases on GitHub.

View on GitHub