持续集成高级篇之Jenkins资源调度
之前的示例我们主要关注点在于功能的实现,都是在一个节点的完成了.有了多个节点后,必须涉及到资源的调度问题.本节我们讲解在创建任务时与资源调度的有关选项以及一些平时没有注意到的但在生产环境需要精细控制的选项.
我们随便创建一个自由式风格任务,这里主要讲解General里的一些选项
Restrict where this project can be run
限制项目运行的节点,勾选后出现Label Expression选项供输入要限制此任务运行节点的标签,可以指定多个标签,也可以使用一些逻辑运算符以构建更为复杂的标签选择.
此选项除了可以输入标签外,也可以输入节点的名称.
比如输入的是master则限定此任务在master节点运行.
支持的运算符:
(表达式)用于复杂的表达式,类似编程语言中的括号
!表达式,逻辑运算,例如!linux则任务运行在不包含linux标签的机器上
a&&b 逻辑且
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 printer3Reserved by 被某个对象预留,这里可以填写任意名称,如果有值,则资源不可用,此选项用于对资源的维护,比如我们要对安装了打印机的主机进行维护,则可以在这里填写一个值,此时任务不能使用此资源,直到值被清除.
我们返回jenkins主界面,点击左侧的Lockable Resources就可以看到有哪些lockable resource,并且可以看到资源的状态
新建一个项目,general选项里选择This build requires lockable resources便可以使用lockable资源,有Resources和labels两个选项可以选,此两个选项是互斥的,即只能选择一个,比如我们可以在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即可.
持续集成高级篇之Jenkins资源调度的更多相关文章
- 持续集成高级篇之Jenkins windows/linux混合集群搭建(二)
系列目录 前面我们说过,要使用ssh方式来配置windows从节点,如果采用ssh方式,则windows和linux配置从节点几乎没有区别,目前发现的惟一的区别在于windows从节点上目录要设置在c ...
- 持续集成高级篇之Jenkins Pipeline 集成sonarqube
系列目录 前面章节中我们讲到了Sonarqube的使用,其实Sonarqube获取msbuild结果主要是执行三个命令,开始标记,执行msbuild,结束标记,这些都是命令,是非常容易集成到我们ci流 ...
- 持续集成高级篇之Jenkins Pipeline git拉取
系列目录 PipeLine中拉取远程git仓库 前面讲自由式任务的时候,我们可以看到通过自由式job里提供的图形界面配置git拉取非常方便的,实际上使用PipeLine也并不复杂.这一节我们展示一下如 ...
- 持续集成高级篇之Jenkins cli与Jenkins ssh
系列目录 Jenkins Cli介绍 Jenkins Cli为Jenkins提供的一个cli工具,此工具功能非常强大,可以完成诸如重启jenkins,创建/删除job,查看job控制台输出,添加/删除 ...
- 持续集成高级篇之基于win32-openssh搭建jenkins混合集群(一)
系列目录 前面的demo我们使用的都是只有一个windows主节点的的jenkins,实际生产环境中,一个节点往往是不能满足需求的.比如,.net项目要使用windows节点构建,java项目如果部署 ...
- 持续集成高级篇之Jekins脚本参数化构建
系列目录 本系列已经很久没有更新了,接前面基础篇,本系统主要介绍jenkins构建里的一些高级特性.包括脚本参数化,Jenkins Pipeline与及在PipeLine模式下如何执行常见的传统构建任 ...
- 持续集成高级篇之Jekins参数化构建(二)
系列目录 上一节我们讲解了如何使用bat脚本或者powershell脚本自身的机制来达到参数化构建的目的,这在一定程序上增加了灵活性,然而缺点也相当明显:它只能适应一些相对比较固定的参数传入(比如像上 ...
- 持续集成高级篇之Jekins参数传入与常见任务
系列目录 有的童鞋可能已经发现,PipeLine项目与自由式项目相比,可配置的项少了很多,比如说环境变量定义,所有步骤完成后执行动作,拉git代码库等.其实这些功能并没有缺,而是配置的方式不一样了,以 ...
- Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上)
Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上) Jenkins+Docker+SpringCloud持续集成流程说明 大致流程说明: 1) 开发 ...
随机推荐
- web-inf与meta-inf
/WEB-INF/web.xml Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则. /WEB-INF/classes/包含了站点所有用的 class 文件,包括 ser ...
- 计算机原理以及PythonIDE配置和使用
计算机基础 在巩固了昨日学习知识的基础上,增加了新的内容 整个关于计算机基础的学习可以浓缩为五个问题 什么是编程? 人与计算机之间的交互操作,使人可以奴役计算机从而让其代替人类工作的行为 操作系统有什 ...
- javascript基础入门知识点整理
学习目标: - 掌握编程的基本思维 - 掌握编程的基本语法 typora-copy-images-to: media JavaScript基础 HTML和CSS 京东 课前娱乐 众人皆笑我疯癫,我笑尔 ...
- 激活函数、正向传播、反向传播及softmax分类器,一篇就够了!
1. 深度学习有哪些应用 图像:图像识别.物体识别.图片美化.图片修复.目标检测. 自然语言处理:机器创作.个性化推荐.文本分类.翻译.自动纠错.情感分析. 数值预测.量化交易 2. 什么是神经网络 ...
- 浅入深出Vue:自动化路由
在软件开发的过程中,"自动化"这个词出现的频率是比较高的.自动化测试,自动化数据映射以及各式的代码生成器.这些词语的背后,也说明了在软件开发的过程中,对于那些重复.千篇一律的事情. ...
- GooglePlay新版排行榜接入
新版本的GMS的api和老版本的有很大的差异,刚接了一下,在这里留一个记号,以便查阅:判定是否已经登录 private static boolean isSignedIn(Cocos2dxActivi ...
- 初试kafka消息队列中间件二(采用java代码收发消息)
初试kafka消息队列中间件二(采用java代码收发消息) 上一篇 初试kafka消息队列中间件一 今天的案例主要是将采用命令行收发信息改成使用java代码实现,根据上一篇的接着写: 先启动Zooke ...
- Linux杀不死的进程之CPU使用率700%
1. 问题发现 [root@zwlbs3 ~]# top i. 发现有个进程CPU使用率居然700%,COMMAND 是一些随机的字符串组成,完了~ 中标了:第一想到就是“沙雕”它,kill 命令给我 ...
- 7.26 面向对象_封装_property_接口
封装 封装 就是隐藏内部实现细节, 将复杂的,丑陋的,隐私的细节隐藏到内部,对外提供简单的访问接口 为什么要封装 1.保证关键数据的安全性 2.对外部隐藏实现细节,隔离复杂度 什么时候应该封装 1.当 ...
- Visual Studio 中两个窗体(WinForm)之间相互传值的方法
编写WinowsForm应用程序时,实现两个窗体之间相互传递值的方法其实很简单.以下用一个例子说明:在名为FormMain主窗体运行过程中利用名为FormInfo窗体,获取用户输入信息,并将这些信息返 ...