持续集成高级篇之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 printer3
Reserved 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 period
jenkins中待处理的队列中在一个任务添加后的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) 开发 ...
随机推荐
- 第三章 jsp数据交互(二)
Application:当前服务器(可以包含多个会话):当服务器启动后就会创建一个application对象,被所有用户共享page.request.session.application四个作用域对 ...
- bootstrap开发响应式网页的常用的一些 类的说明
1.navbar-导航条 1.navbar-fixed-top,让导航条固定显示在页面上部(注意:固定的导航条会遮住代码,解决方案,给body设置padding-top的值[大于或等于]为我们导航条的 ...
- Android:JNI与NDK(二)交叉编译与动态库,静态库
欢迎关注公众号,第一时间获取最新文章: 本篇目录 一.前言 本篇主要以window开发环境为背景介绍一下NDK开发中需要掌握的交叉编译等基础知识,选window系统主要是照顾大多数读者,mac ,li ...
- set和map结构,class类
1.set数据结构和map数据结构: (1)set: 数据结构set(集合,无序且值不能重复的数据集合,特点是key值和value值相同,没有重复的value //1 创建set ,,]) conso ...
- Linux虚拟机所装软件说明
Linux虚拟机所装软件说明 第一台虚拟机192.168.72.201 的 /usr/local/ 目录下放了一下软件: drwxr-xr-x 3 root root 4096 6月 14 19:16 ...
- Linux 清理空间
背景: 在使用Linux服务器的时候,经常会碰到服务器上的磁盘空间满了,在该种情况下,必须进行磁盘空间清理. 解决方法: 示例:需要/tmp下空出至少1G的可用空间 分别执行的命令如下: df /tm ...
- 前端笔记之微信小程序(二){{}}插值和MVVM模式&数据双向绑定&指令&API
一.双花括号{{}}插值和MVVM模式 1.1 体会{{}}插值 index.wxml的标签不是html的那些标签,这里的view就是div. {{}}这样的插值写法,叫做mustache语法.mus ...
- CentOS7.6源码编译安装PHP 7.3.8
安装步骤 PHP官网下载链接:https://www.php.net/downloads.php 1. 使用wget命令下载源码安装包 wget https://www.php.net/distrib ...
- Java连载11-转义字符&整数型
一.转义符 1.\'代表单引号:\\代表\; 二.native2ascii.exe JDK中自带的native2ascii.exe命令,可以将文字转换成unicode编码形式 我们使用这个程序尝试一下 ...
- 【错误】【vscode】输出中文是乱码问题