持续集成高级篇之Jenkins资源调度

系列目录html

以前的示例咱们主要关注点在于功能的实现,都是在一个节点的完成了.有了多个节点后,必须涉及到资源的调度问题.本节咱们讲解在建立任务时与资源调度的有关选项以及一些平时没有注意到的但在生产环境须要精细控制的选项.linux

咱们随便建立一个自由式风格任务,这里主要讲解General里的一些选项git

Restrict where this project can be run

限制项目运行的节点,勾选后出现Label Expression选项供输入要限制此任务运行节点的标签,能够指定多个标签,也可使用一些逻辑运算符以构建更为复杂的标签选择.数据库

此选项除了能够输入标签外,也能够输入节点的名称.编程

好比输入的是master则限定此任务在master节点运行.windows

支持的运算符:编程语言

  • (表达式)用于复杂的表达式,相似编程语言中的括号svn

  • !表达式,逻辑运算,例如!linux则任务运行在不包含linux标签的机器上post

  • a&&b 逻辑且ui

  • a||b逻辑或

  • a -> b 这里举个例子说明它的使用方法.好比windows->x64则限定若是节点运行在windows机器上,则必须运行在x64类型的windows机器上(即一节点同时包含windows x64两个label),若是不是windows机器,则没必要是x64系统.

  • a <-> b 这里仍然举例说明.好比windows<->datacenter1,若是主机是windows系统,则必须运行在datacenter1机房,若是不是windows系统,则必须不能运行在datacenter1机房.

其它示例:

  • linux-machine-42,任务运行在主机名为linux-machine-42的节点上,或者标签为linux-machine-42的节点上

  • windows && jdk9,任务必须运行在windows主机上,而且jdk版本为9(须要注意的是这里仅仅是逻辑上的限制,实际上咱们为一个节点打上jdk9标签,这台机器并不必定安装了jdk9,这里仍是须要咱们人为控制)

  • postgres && !vm && (linux || freebsd) 运行在有postgres数据库的linux或者freebsd系统类型,而且不是虚拟机的节点上.

This build requires lockable resources

此构建须要锁定的资源,锁定的资源由咱们在全局配置里使用.

  • 建立lockable resources

进入manage jenkins->system configuration,而后向下滚动找到Lockable Resources Manager,而后点击Add lockable resource按钮.出现输入框,下面讲解每一项的含义

  • Name lockable资源的名称,只有定义的名称建立项目的时候才可使用它,好比printers定义了一个名叫做printers类型的lockable资源

  • Description 描述,能够随便添加一些描述信息

  • Labels 要选择的节点,多个之间用空格分割.好比printer1 printer2 printer3

  • Reserved by 被某个对象预留,这里能够填写任意名称,若是有值,则资源不可用,此选项用于对资源的维护,好比咱们要对安装了打印机的主机进行维护,则能够在这里填写一个值,此时任务不能使用此资源,直到值被清除.

咱们返回jenkins主界面,点击左侧的Lockable Resources就能够看到有哪些lockable resource,而且能够看到资源的状态

新建一个项目,general选项里选择This build requires lockable resources即可以使用lockable资源,有Resourceslabels两个选项能够选,此两个选项是互斥的,即只能选择一个,好比咱们能够在Resources里指定printers,或者在labels里指定printer1或者printer2,具体要根据要锁定的资源而定.若是仅仅要锁定一个打印机,则能够用resoures,若是想要锁定某个特定类型的资源,则可使用lable.

咱们构建完任务后,点击构建号进入详细构建信息页面,点击左侧的lockable resources则能够看到本次构建锁定的资源.

这里说锁定资源,是指此构建对资源的独占,若是其它构建也锁定了相同的资源,则须要排除等待.

因为jenkins里的资源都是节点资源,即没有其它类型的资源,所以使用lockable resources能完成的工做使用label选择也一样能完成,使用kockable resources的好处在于对资源的管理更为方便,有些资源是有限的,若是lable过于复杂很难理清关系,而lockable resoure则有单独的资源管理界面,方便对这些关键的资源进行管理.

高级选项之Quiet period

勾选后,会出现Quiet period,值默认为秒.此选项的意义为在实践中有些用户每每会在提交git后又立刻发现问题,紧接着进行数次提交.这样就会触发多个hook事件,致使屡次构建,若是指定一个Quiet periodjenkins中待处理的队列中在一个任务添加后的Quiet period范围内再添加任务将不会被加入到队列.保证一个相关的提交只构建一次,防止没必要要的资源浪费.

高级选项之Retry Count

此选项也是对SCM的,若是一个构建使用了SCM(git,svn等),则在拉取代码失败后会进行若干次重试,若是在指定的重试次数用完后仍然未能拉取,则这次构建标记为失败.

此选项若是不勾选默认的行为是若是拉取代码失败,则任务立刻标识为失败,至关于Retry count值设置为0

高级选项之Execute concurrent builds if necessary

必要时执行并行构建.默认状况下,若是对同一任务触发屡次构建,这些任务会造成队列,上一个完成后下一个才开始构建,若是机器资源充足的状况下能够勾选此选项,这样jenkins就会并行调度任务(同一任务可能同时运行多个构建),咱们不用担忧资源覆盖问题,由于jenkins在构建时会自动为同一构建不一样编号的任务建立不一样的构建目录.

须要注意的是,若是构建勾选了Use custom workspace而且指定了自定义构建目录,则jenkins不会为不一样的构建建立隔离的目录,这种状况下同一任务并行构建就会出问题.

高级选项之Use custom workspace

jenkins并不仅是构建项目用,还能够执行一些其它的任务,好比在特定的目录下执行一些操做.可是jenkins会为每一个任务建立一个固定的文件夹,此时如何指定Use custom workspace则会改变jenkins的默认行为,让jenkins在特定的目录上下文环境下执行任务.

任务组织和管理

建立view

默认状况下Jenkins里有一个All view,默认建立的任务都会显示在这里,随着接入jenkins项目愈来愈多,这个view就会变得愈来愈臃肿,难以管理.这时候咱们能够建立更多的view来对任任务进行逻辑上管理.建立view也很简单,All后面一个+号就能够建立一个新的view,详细步骤这里就再也不介绍了.建立完之后All后面就会多出一个标签,点击这个标签就能够切换到这个视图,在当前view激活的状况下,建立新的项目时,默认会勾选Add to current view把项目添加到当前视图.

把部分已有任务添加到当前视图

若是你新建立视图后没有进行任何操做,则当前视图下有这样一句话

This view has no jobs associated with it. You can either add some existing jobs to this view or create a new job in this view.

点击add some existing jobs在出现的页面里就能够从jobs里勾选想要添加进来的任务,而后点击ok便可.

这个页面和建立view页面相似,建立view的界面里一样也有添加job到view的选项,选择便可.

若是咱们已经添加了任务,则上面的连接就会消失了,此时咱们能够在视图激活的状况下,点击左侧的Edit view按钮,进入和刚才同样的界面,而后在这个页面里选择要添加的job.

删除一个已有view

在当前view激活状态下,左侧有一个delete view按钮,咱们点击它就能够删除当前view

须要注意的是,删除view并不删除它里面的任务,view删除之后里面的任务会被移到All里面

建立文件夹

文件夹也是用来组织任务的一种方式,咱们点击New Item下面有一个Folder类型,咱们选择它之后就能够建立一个文件夹.咱们进入到里面会发现,里面也包含一个all类型的视图,和外层同样.也能够像在外层一下添加项目.点击左侧的delete folder按钮则能够删除当前文件夹.

把文件夹移动到其它视图

点击左侧的move按钮,就会出现一个下拉列表,列出了当前全部的view,选择想要移动到的view便可.