我们在Jenkins中调用任务,在并行开启多个的时候,一般都是随机开始的,抢执行器的资源按照先到先得的方式进行,其他没有执行器的任务会进入等待时间。但我们或多或少会有这样的需要,确保某一种任务能够排队的时候靠前一些。
所以这一篇将为大家解决这个问题,将着重对Jenkins中的优先级调度功能进行介绍和实践。
插件的选择
插件全名为Priority Sorter Plugin,我使用的版本是版本 4.1.0,在今天凌晨发布了新版5.0.0,不过新版本对Jenkins版本和java版本要求已经不适合我了,所以这里还是用的4.1.0。这篇文章基于Jenkins 2.361版本进行的验证。
机缘巧合下发现了这款插件,这个插件的主要功能是实现Jenkins任务能够在排队的时候按照预设的优先级进行排序,而不是机会均等的使用资源。
使用效果验证
先建立一批工程。一个multijob下挂载四个工程,其中priority_test工程是我们计划优先的工作,其他的则是陪跑的工程。
multijob的配置如下:
插件使用前
点击运行这个multijob后回到主要查看左侧的构建队列
可以看出来这个顺序和multijob 的配置基本相当
当节点只有一个的时候,可以看到
顺序并不会完全的按照multijob配置的走。
添加插件配置
安装上插件后在主页左侧功能列表下方会看到对应的功能按钮
进去后添加规则,这里选择jobs included in a view
已经在前面将priority_test这个工程预设在了123的视图里。
Use a regular expression to only include a subset of the included jobs这个配置项是用来排除一些不需要调整优先级的工作的,一般不建议这个视图里放其他东西。
Priority配置项目是优先级的值,越小越优先,选1排最前面。
Run Exclusive配置项用于排除其他工作,只有这系列工程跑完之后才轮到别的跑
Use additional rules when assigning a priority to a job配置项目是配置额外的策略,当这个任务符合下面这些条件时重新调整优先级。
这里给视图配上1的优先级,其他的都不设置。
再次执行的时候可以看到priority_test将排在前面了。
在别的任务启动前再启动一次priority_test,也能排到前面去,非常好用。
关于视图配置
在已有的视图上加任务就点到那个视图后编辑即可,如果要新建视图就在主页的任务区域后方点击加号添加。
一个任务可以被多个视图包含。当多个基于视图的规则都涉及一个工程时,取的优先级最高的配置。对有优先级的视图配置建议放在独立的视图中处理,和平时按照任务分的视图区分开。
当涉及到优先级的配置的视图被删除时,这个版本的配置进去查看会自动转给别的视图,但在你保存前是不会生效的,也就是实际没有这个规则,所以在使用这种规则后尽量不要删除视图。