Pipeline DORA Metrics

A Jenkins plugin that tracks all four DORA metrics, pipeline analytics, rankings, and performance trends. No external infrastructure required.

Dashboard Overview

Features

DORA Metrics (All 4)

  • Deployment Frequency with DORA band rating (Elite/High/Medium/Low)
  • Lead Time for Changes (commit to deploy)
  • Mean Time to Restore (failure to recovery)
  • Change Failure Rate (% failed deployments)

Pipeline Rankings and Stage Analytics

Pipeline Rankings and Stage Analytics

  • Slowest pipelines by average duration
  • Most failing pipelines by failure rate
  • Most improved (month-over-month duration change)
  • Flakiest pipelines (pass-fail-pass pattern detection)
  • Slowest and most failing stages across all pipelines

Per-Job Metrics

Per-Job Metrics

  • Per-job DORA Metrics tab on every job page
  • Stage breakdown with duration and run counts

Dashboard

  • Interactive Chart.js trend charts (build volume, duration over time)
  • Sparkline trends on each DORA metric card
  • Date range picker (7d / 30d / 90d / 180d / 1y / custom date range)
  • Collapsible sections with chevron indicators
  • Job drill-down links (click any pipeline to see its per-job metrics)
  • CSV and JSON export
  • Permission-aware: users only see jobs they have access to

Configuration

Configuration

Cloud Export and Thresholds

  • Production job pattern (regex)
  • Excluded job pattern (regex)
  • Folder-based job selection
  • Branch filtering (main/master or custom)
  • Customizable DORA band thresholds
  • Cloud storage export (S3-compatible, HTTP endpoint) with Jenkins Credentials

Permission-Aware Dashboard

Viewer Dashboard

Rankings only show jobs the current user has access to. Users with limited permissions see a filtered view.

REST API

GET /dora-api/overview?days=30          All 4 DORA metrics
GET /dora-api/pipelines?days=30&limit=10   Pipeline rankings
GET /dora-api/trends?days=90&job=my-pipeline   Time-series trend data
GET /dora-api/export?days=90&format=csv    CSV/JSON bulk export

How It Works

The plugin uses a RunListener to automatically capture build data after every pipeline completes. Data is stored in an embedded SQLite database at JENKINS_HOME/pipeline-dora-metrics/metrics.db. No external database setup required.

Data captured per build:

  • Job name, build number, timestamp, duration, result
  • Trigger type (user, SCM, timer, upstream)
  • Branch name (from environment variables)
  • Stage-level duration and result for each pipeline stage
  • SCM commit data for lead time calculation

Storage: ~200 bytes per build with stages. 100 builds/day for a year is approximately 7MB.

Scale Builds/day Storage/year
Small team (10 jobs) 50 ~3.5MB
Medium (50 jobs) 200 ~14MB
Large (200 jobs) 1000 ~70MB
Enterprise (1000 jobs) 5000 ~350MB

Configuration

Navigate to Manage Jenkins > System and scroll to the Pipeline DORA Metrics section.

Job Filtering:

  • Production Job Pattern: Regex to match production jobs (e.g., production/.* or .*-prod.*). Default: .* (all jobs)
  • Excluded Job Pattern: Regex to exclude jobs (e.g., .*-test.*|.*sandbox.*)
  • Production Folders: Comma-separated Jenkins folder paths (e.g., production,deploy/prod)
  • Production Branch Pattern: Regex for branches that count as production (e.g., main|master|release/.*)

DORA Thresholds: Customize the Elite/High/Medium/Low band boundaries for each metric to match your team's standards.

Architecture

io.jenkins.plugins.dorametrics/
├── collectors/
│   ├── BuildDataCollector      # RunListener - captures builds, stages, commits
│   └── JobRenameListener       # ItemListener - tracks job renames/moves
├── dora/
│   └── DoraCalculator          # Computes all 4 DORA metrics (SQL-optimized)
├── export/
│   ├── ExportStorageConfig     # Describable base for storage backends
│   ├── S3ExportConfig          # S3-compatible storage (AWS, B2, MinIO)
│   └── HttpExportConfig        # HTTP endpoint export
├── rankings/
│   └── PipelineRanker          # Pipeline and stage rankings (SQL aggregates)
├── store/
│   ├── MetricsStore            # SQLite database
│   ├── MetricsExporter         # Builds snapshots, delegates upload to config
│   └── MetricsMaintenanceTask  # Scheduled cleanup and export
├── ui/
│   ├── DoraApiAction           # REST API at /dora-api/ (auth-protected)
│   ├── DoraDashboardAction     # Dashboard UI at /dora-metrics/
│   ├── DoraDashboardLink       # Manage Jenkins sidebar link
│   └── JobMetricsAction        # Per-job metrics tab
├── util/
│   └── DurationFormatter       # Shared duration formatting
└── DoraGlobalConfiguration     # Plugin settings

Security

  • All API endpoints require Jenkins READ permission
  • Dashboard rankings filtered by Item.READ (users only see jobs they can access)
  • Export credentials managed through Jenkins Credentials plugin (encrypted, auditable)
  • SQL queries use parameterized statements (no SQL injection)
  • CSV export protects against CSV injection attacks
  • SQL ORDER BY clauses are whitelisted (not user-controlled)

Roadmap

v1.1 (Planned)

  • Additional export backends (GCS, Azure Blob) and IAM role support for S3
  • Historical build import (backfill metrics from existing Jenkins build history)
  • Grafana dashboard template (JSON) that consumes the REST API

v1.2 (Planned)

  • Month-over-month comparison view (side-by-side metrics)
  • DORA band progression chart (track your team's improvement over time)
  • Stage failure heatmap visualization
  • Webhook notifications when DORA bands change (Slack, Teams, email)

v2.0 (Future)

  • Multi-controller aggregation (combine metrics across Jenkins instances)
  • Team/group-level DORA metrics (assign jobs to teams)
  • GitHub Actions and GitLab CI support (beyond Jenkins)
  • Connection pooling with HikariCP for enterprise scale

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Write tests for new functionality
  4. Run mvn test (all 87 tests must pass)
  5. Submit a pull request

License

MIT