A comprehensive Jenkins plugin for intelligent job prioritization and scheduling with advanced features including:
- Multi-level priority queues (P0-P4)
- Smart job scheduling based on build history
- Concurrency limits per repository and branch
- Token-based rate limiting per team and repository
- Code change analysis to adjust priorities
- Emergency escalation workflow for critical builds
- Comprehensive metrics via Prometheus
- AI-based priority recommendations
- Complete audit logging
- Observability dashboard
Jobs are prioritized across 5 levels:
- P0 (Critical): CTO-level escalation, production outages
- P1 (High): Production issues, security fixes
- P2 (Normal): Regular builds and features
- P3 (Low): Documentation changes, minor fixes
- P4 (Background): Non-urgent maintenance tasks
Within the same priority level, jobs are further sorted by:
- Estimated duration (shorter jobs first)
- Time in queue (aging factor)
- Limit concurrent builds per repository (default: 3)
- Limit concurrent builds per branch (default: 1)
- Reserve executor slots for P0 jobs
- Fair-share scheduling across teams
Token bucket implementation to prevent excessive builds:
- Per-team limits (default: 50 builds/hour)
- Per-repository limits (default: 20 builds/hour)
- Automatic token refill
- Clear error messages when limits are hit
Automatically adjusts priority based on changes:
- Documentation-only changes → Lower priority
- Code-heavy changes → Maintain/increase priority
- Test-only changes → Slightly lower priority
- Configuration changes → Maintain priority
Three-level escalation path:
- Manager level: Escalate to P1
- Director level: Escalate to P0
- CTO level: Immediate P0 with reserved slots
- Approval workflow with justification
- Automatic expiration after 4 hours
Prometheus metrics for:
- Queue depth by priority
- Build duration histograms
- Agent usage tracking
- Capacity saturation
- Token bucket levels
- Rate limit rejections
- Escalation statistics
Machine learning analysis of:
- Historical build patterns
- Success/failure rates
- Team and repository patterns
- Commit message analysis
- Recommended priority with confidence scores
Complete audit trail of:
- All priority changes
- Build starts and completions
- Rate limit rejections
- Escalation requests
- AI recommendations
- Daily JSON log files
- Searchable history
- Build the plugin:
mvn clean package- Install the generated HPI file in Jenkins:
- Go to Manage Jenkins → Manage Plugins → Advanced
- Upload
target/job-prioritization.hpi - Restart Jenkins
Navigate to Manage Jenkins → Configure System → Job Prioritization Configuration
Configure:
- Enable/disable features
- Concurrency limits
- Rate limiting parameters
- Capacity thresholds
- Short job threshold
In each job's configuration:
- Add Job Priority Configuration property
- Set the priority level (P0-P4)
- Specify the team name
- Enable/disable escalation
// In Jenkinsfile
properties([
jobPriority(
priority: 'P2_NORMAL',
team: 'backend-team',
allowEscalation: true
)
])- Navigate to Job Prioritization Dashboard
- Submit escalation request with justification
- Await approval from authorized personnel
- Job priority automatically updated on approval
Metrics are exposed at /prometheus endpoint:
curl http://jenkins.example.com/prometheusAccess the dashboard at: Jenkins → Job Prioritization Dashboard
View:
- Current queue statistics
- Pending escalations
- Recent audit entries
- Token bucket status
- Capacity utilization
Key metrics exposed:
# Queue metrics
jenkins_prioritization_queue_depth{priority="P2_NORMAL"} 5
jenkins_prioritization_queue_wait_time_seconds{priority="P2_NORMAL"} 120
# Build metrics
jenkins_prioritization_builds_started_total{priority="P2_NORMAL",team="backend",repository="app"} 150
jenkins_prioritization_build_duration_seconds{priority="P2_NORMAL"} 245
# Concurrency metrics
jenkins_prioritization_concurrent_builds_repo{repository="app"} 2
jenkins_prioritization_concurrent_builds_branch{repository="app",branch="main"} 1
# Capacity metrics
jenkins_prioritization_capacity_saturation 0.75
jenkins_prioritization_reserved_slots_available 2
# Token bucket metrics
jenkins_prioritization_token_bucket_level{type="team",identifier="backend"} 35
jenkins_prioritization_token_bucket_rejections_total{type="repository",identifier="app"} 3
- Use P0 sparingly for true emergencies
- P1 for production issues
- P2 for regular development
- P3/P4 for non-critical work
- Adjust token limits based on team size
- Monitor rejection rates
- Encourage local testing
- Set up alerts for high saturation
- Reserve adequate slots for P0
- Track agent usage patterns
- Respond to escalation requests promptly
- Document justifications
- Review escalation patterns
- Review AI suggestions regularly
- Provide feedback to improve model
- Combine with human judgment
┌─────────────────────────────────────────────────────────┐
│ Jenkins Queue │
└────────────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────┐
│ PriorityQueueSorter │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 1. Extract job priority │ │
│ │ 2. Analyze code changes │ │
│ │ 3. Check build history │ │
│ │ 4. Apply aging factor │ │
│ │ 5. Sort by effective priority │ │
│ └──────────────────────────────────────────────────┘ │
└────────────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────┐
│ QueueTaskDispatchers │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ ConcurrencyLimiter│ │ RateLimitDispatcher│ │
│ │ - Repo limits │ │ - Team tokens │ │
│ │ - Branch limits │ │ - Repo tokens │ │
│ └──────────────────┘ └──────────────────┘ │
└────────────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────┐
│ Build Execution │
└────────────────────┬────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────┐
│ Metrics & Audit Logging │
│ - Prometheus metrics │
│ - JSON audit logs │
│ - AI analysis │
└─────────────────────────────────────────────────────────┘
mvn clean installmvn testmvn hpi:runAccess at: http://localhost:8080/jenkins
- Check capacity saturation
- Review priority distribution
- Consider adding more executors
- Increase token limits
- Encourage local testing
- Review build frequency
- Check audit log for AI recommendations
- Review code change analysis settings
- Verify escalation approvals
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Add tests for new features
- Submit a pull request
MIT License - see LICENSE file
- GitHub Issues: https://github.com/vrenjith/jenkins-prioritization-plugin/issues
- Documentation: https://github.com/vrenjith/jenkins-prioritization-plugin/wiki
- Pre-emption support (interrupt running jobs)
- Resume capability for interrupted jobs
- Machine learning model training
- Integration with external AI services
- Advanced SCM change analysis
- Custom priority rules engine
- Multi-Jenkins coordination
- Mobile escalation app