This plugin allows Jobs to be prioritised based Queue Strategies and Priority Strategies.
This plugin adds the ability to assign different priorities to Jobs, the lower priority the job has the sooner the Job will run.
This can be very helpful when one wants to add low priority jobs but wants to have higher-priority jobs run first when hardware is limited or when there are different groups of Jobs that should share resources (equally).
The plugin is build around some basic concepts, Queue Strategy, Job Group, Job Inclusion Strategy and Priority Strategy.
First the Queue Strategy, this describes how the priority of a Job is interpreted, it will translate the assigned priority on a Job to a corresponding weight in the queue, the queue is then sorted based on the assigned weight.
With Priority Sorter you will need to group your Jobs into Job Groups, if a Job should be included in a specific Job Group is decided by the Job Inclusion Strategy assigned to the Job Group.
The priority of the Job is then set by the Priority Strategy, each Job Group can have any number Priority Strategies.
So when a new Job is Queued the following will happen, Priority Sorter will go though the configured Job Groups from top to bottom. When Priority Sorter find a Job Group where the Job is to be included it will look though the Priority Strategies from top to bottom, when it finds a Priority Strategy that matches it will use this strategy to assign a priority the the Job. Priority Sorter will now consult the Queue Strategy to translate the priority to a weight, ie a position in the queue.
There are four included Queue Strategies, the different Queue Strategies will sort the Queue differently.
Each Job will be assigned a Priority, the lower the Priority the sooner the Job will be run.
Each Job will be assigned a Priority, the Queue will try to share the resources equally over the different priorities in a round-robin fashion.
The same as Fair Queuing but Jobs with lower Priority will be run more frequently than Jobs with higher Priority.
This setting describes what Jobs should be included in a Job Group, these are relative self exploratory. Worth to mention is the "Jobs marked for inclusion", when this is selected you are requested to enter a name of the Job Group. This name will then be selectable on each Job, this is an alternative "bottom-up" way to group Jobs rather than the "top-down" approach of the other strategies.
It is possible to assign the Priority based on different Priority Strategies
This setting describes what priority a Jobs should have, these are relative self exploratory. Worth to mention is the "Take the priority from Property on the Job", when this is selected a drop-down where you can select a priority appears on all Projects that would generate Jobs that would be included in this group.
The main configuration of the plugin is done on the main Configurations Page and the Priority Strategy configurations done on its own page accessible from the root actions menu.
On the main configuration you select the number of priorities you would like to use as well as the default priority to use where no other priority could be assigned.
Please note that lower number means higher priority, also see details on screen for the specifics on each Strategy.
On the main menu you will fin the link to the page where you can assign priorities to each Job
On this page you will be able to assign Jobs to Groups and priorities to Jobs.
Please note that all matching is done top to bottom by first match
You can limit access to this functionality to Administrators only be checking the appropriate check-box on the main configuration page.
If a Job from a Run Exclusive Job Group gets started Jobs from other Job Groups will stay blocked and will not get started until all Jobs from the Run Exclusive Job Group in the Queue is finished, regardless of priority.
Since a Job can get a different Priority each time it is started the View Column cannot show the "correct" priority for the Job.
The column will show the priority used the last time the Job was launched, if the Job has not been started at all yet the column will show Pending.
2.x is a complete rewrite of the plugin, 2.x still supports running in 1.x compatibility mode. However if you are satisfied with the functionality of 1.x there is little point in upgrading.
In 3.x the option "Allow priorities directly on Jobs" has been removed in favor of the Priority Strategy "Take the priority from Property on the Job" (see above). Legacy Mode is removed (see above upgrading from 1.x)
To get some inside information on how and why a certain Job gets a certain Priority you can turn on some extra logging.
Logger to log is PrioritySorter.Queue.Items
To get more info on the assigned priorities and state transition of the items in the queue log on level FINE.
To get even more info on how the Jobs are matched to Job Groups and Rules to get the priority log on level FINER.
To get logging on when the Queue Sorter is active log PrioritySorter.Queue.Sorter on level FINE.
To see all items sorted (the queue) by the Queue Sorter PrioritySorter.Queue.Sorter on level FINER.
Fixes : issue #28621 Jenkins jobs get held up in queue waiting for available executors, even though all are available
Fixes : issue #28462 Priority selection on Job is "always" shown
Fixes : issue #28195 Jenkins not scheduling any jobs after upgrade to Priority Sorter 3.0 but giving exception
Fixes : issue #21337 Add support for cloudbees-folders
Fixes : issue #27957 NullPointerException in AdvancedQueueSorter
Fixes : issue #27770 AdvancedQueueSorter call to sort violates the comparison contract
Never released - maven hickup
Fixes : issue #23462 Sectioned views are not evaluated for job priority
Fixes : issue #23428 Jobs in NestedView (ViewGroup) are not correctly found
Fixes : issue #21310 CCE when a Queue.Task was not a Job
Fixes: issue #21173 Anonymous Users Can Configure Priorities
Fixes: issue #11997 Consider jobs in the Executors for priority sorter
Fixing bug that made the plugin switch to Advanced mode even though Legacy (1.3) data was present in the system. (Thanks to help from Matthew Webber)
Fixes: [JENKINS-8597] Deal with matrix builds better
Fixes bug that mapped all Jobs to all Views/JobGroups.
Introducing advanced queueing features with possibility to selected different strategies for how priorities are assigned and how the queue is sorted.
Thanks Oleg for testing, reviewing and helping out.
Removed view column from default view (Thanks to work from larrys)
Added View column to easily compare priorities between jobs (Thanks to work from cjo9900)
Fixed a potential NPE when using the plugin on existing jobs without setting a default priority.
Skip to end of metadata Go to start of metadata