队列与权限:Priority Sorter 与 Role-Strategy
October 27, 2024About 3 min
队列与权限:Priority Sorter 与 Role-Strategy
构建机紧张时要控制谁先跑,这是 Priority Sorter;多项目共用一个 Jenkins 要控制谁能看/能构建哪些 job,这是 Role-Strategy。两个都是多团队共用 Jenkins 时绕不开的插件。
Priority Sorter:给 job 排优先级插队
PrioritySorter 插件。核心规则:数字越低优先级越高、越靠前插队。能做到:
- 不同 job 的进程按优先级排队、插队。
- 同一 job 同时触发多个进程时,进程之间也按优先级排。
- 同一 job 在不同触发条件下取不同优先级。
队列策略(Queue Strategy)
Manage Jenkins → Configure System → Priority Sorter 里选:
- Absolute:每个 job 分配一个优先级,优先级越低越先跑。
- Fair Queuing:轮转方式在不同优先级间尽量平均分配资源。
- Weighted Fair Queuing:同 Fair Queuing,但低优先级数字(=更重要)的 job 跑得更频繁。
勾选 Only Admins can edit job priorities 后,只有管理员能编辑排队策略,普通用户仍可触发这些策略。
优先级如何确定
一个 job 入队时:
- Priority Sorter 从上到下遍历配置的 Job Group。
- 找到包含该 job 的 Job Group 后,从上到下遍历它的 Priority Strategy。
- 找到第一个匹配的 Priority Strategy,用它给 job 定优先级。
- 再按 Queue Strategy 把优先级换算成队列里的权重(位置)。
也就是说每组用最先匹配的优先级。Job Group 的过滤方式有几种:全部 job、按名称/正则纳入、按 view 纳入、按 folder 纳入。改了 view 名后要回规则里重设,否则它会自动指向第一个 view。
用构建参数控制优先级
让同一 job 的多个进程按参数排队插队:
- 建一个 Priority Group,规则选 Use Priority from Build Parameter,参数名比如
BuildPriority。 - 在 job 的
Config → Include this job in a job group把它归进这个组。 - Pipeline 里声明该参数:
parameters {
choice(choices: ['5', '4', '3', '2', '1'], name: 'BuildPriority')
}
这样触发时选的数字越小越插队。配合「同一节点单 executor」就能让重要构建优先占用机器。
Role-Strategy:基于角色的权限
Role-Strategy 插件装好后,在 Configure Global Security 把授权策略选成 Role-Based Strategy,保存后会出现 Manage Roles 和 Assign Roles。
角色分两类:
- Global roles:作用于全部 item。
- Item roles:针对某个项目,或用正则匹配一批项目。
配置思路:
- 如果所有用户都能看/访问所有项目,只配 Global roles 即可。
- 如果不同用户要看不同项目、且各项目权限不同,用 Item roles,但仍必须配一个 Global role 并给 Overall 的 Read 权限——否则用户连项目都看不到。Global role 里除 Read 外别给其它权限;Global 和 Item 的权限是合并取最大可用的。
Assign Roles 时,角色也要在 Global roles 里加过,否则会报 access deny。
最终效果举例:匿名用户只对 MyProject_Daily.* 有 Read 权限,对其它项目只有 Build 权限——这种「公开只读 + 受限构建」的组合,靠 Item role 配正则就能实现。