一、Jenkins的Master/Slave机制                                                                                                                            

Jenkins采用Master/Slave架构。Master/Slave相当于Server和agent的概念,Master提供web接口让用户来管理Job和Slave,Job可以运行在Master本机或者被分配到Slave上运行。一个Master可以关联多个Slave用来为不同的Job或相同的Job的不同配置来服务。

Jenkins的Master/Slave机制除了可以并发的执行构建任务,加速构建以外。还可以用于分布式自动化测试,当自动化测试代码非常多或者是需要在多个浏览器上并行的时候,可以把测试代码划分到不同节点上运行,从而加速自动化测试的执行。

Master:Jenkins服务器。主要是处理调度构建作业,把构建分发到Slave节点实际执行,监视Slave节点的状态。当然,也并不是说Master节点不能跑任务。构建结果和构建产物最后还是传回到Master节点,比如说在jenkins工作目录下面的workspace内的内容,在Master节点照样是有一份的。

Slave:执行机(奴隶机)。执行Master分配的任务,并返回任务的进度和结果。

jenkins slave节点 oom jenkins slave工作原理_调度策略

Jenkins Master/Slave的搭建需要至少两台机器,一台Master节点,一台Slave节点(实际生产中会有多个Slave节点)。Jenkins分布式环境搭建步骤如下:

(1)前提:Master和Slave都已经安装JDK 1.8或更高版本

(2)Master节点上安装和配置Jenkins

(3)Master节点上新增Slave节点配置,生成Master-Slave通讯文件SlaveAgent

(4)Slave节点上运行SlaveAgent,通过SlaveAgent实现和Master节点的通讯

(5)Master节点上管理Jenkins项目,指定Slave调度策略,实现Slave节点的任务分配和结果搜集来源。

 

二、为Jenkins配置Master节点                                                                                                                                

Master不需要主动去建立,安装Jenkins、创建了Jenkins账户,在登录到主界面时,这台电脑就已经默认为master。

选择“Manage Jenkins”->“Manage Nodes and Clouds”,可以看到Master节点相关信息:

jenkins slave节点 oom jenkins slave工作原理_Jenkins_02

  

三、为Jenkins添加Slave Node                                                                                                                                 

在Jenkins界面选择“Manage Jenkins”->“Manage Nodes and Clouds”->“New Node

jenkins slave节点 oom jenkins slave工作原理_Windows_03

(1)配置Node Name

(2)配置Agent类型:选择永久模式(Permanent Agent)。更多Agent种类请安装类插件后可见。

(3)接下来配置Agent信息

jenkins slave节点 oom jenkins slave工作原理_调度策略_04

 

Name:Slave机器的名字

Description:描述 ,不重要 随意填

of excutors:允许在这个节点上并发执行任务的数量,即同时可以下发多少个Job到Slave上执行,一般设置为 cpu 支持的线程数。[注:Master Node也可以通过此参数配置Master是否也执行构建任务、还是仅作为Jenkins调度节点]

Remote root directory:用来放工程的文件夹,jenkins master上设置的下载的代码会放到这个工作目录下。

Lables:标签,用于实现后续Job调度策略,根据Jobs配置的Label选择Salve Node

Usage:支持两种模式“Use this Node as much as possible”、“Only build Jobs with Label expressiong matching this Node”。选择“Only build Jobs with Label     expressiong matching this Node”,

Launch method:这里以选择JNLP连接方式为例,如下:(也可选择Launch agent by connecting it to the master)

(1)对于老版本Jenkins,选择为TCP port for JNLP agents jenkins

(2)对于新版本Jenkins,选择jave web start

注意:使用JNLP方式,需要在Manage Jenkins->Configure Gloabl Security界面配置:勾选“随机选取”、勾选“Java Web Start Ageng Protocol/4”(有的版本是“Inbound TCP Agent Protocol/4”)、Enable Agent配置为Enable

jenkins slave节点 oom jenkins slave工作原理_jenkins slave节点 oom_05

更多Launch Method种类请在Manage Jenkins->Manage Plugins->Available界面安装(图片)类插件后可见:

jenkins slave节点 oom jenkins slave工作原理_Windows_06

 

添加完毕后,在Jenkins主界面,可以看到新添加的Slave Node,但是红叉表示此时的Slave并未与Master建立起联系。节点的“of excutors”通道数可以在此界面上看到:  

jenkins slave节点 oom jenkins slave工作原理_调度策略_07

接下来进一步做Slave Node配置。

1、Slave Node节点为Windows系统

登录Slave Node主机,浏览器中通过Jenkins master节点的URI登录系统,在Manage Jenkins->Manage Nodes and Clouds页面点击刚新建的节点,进入如下界面:

jenkins slave节点 oom jenkins slave工作原理_调度策略_08

方式一:点击上图中的 “Launch” 按钮,下载 Slave-agent.jnlp 文件到本地,以管理员的权限在命令行执行 Slave-agent.jnlp,最终会弹出一个小窗口,提示Connect,表示Slave Node 和Master Node连接成功。

如果希望把 Slave-agent .jnlp安装成 Windows Service,以后 Slave Node重新启动就能自动连接 master。在弹出一个小窗口的 File 菜单中点击 “Install as a service”,完成安装后上面的小程序会自动关闭,一个命令为jenkinsagent的 Windows服务被创建。

方式二:采用命令行方式。下载agent.jar文件到本地,以管理员的权限在命令行执行截图中的命令。(其中Localhost:8080替换为Jenkins的Master的URI)

如果希望本命令在Slave Node重启时自动运行,可以把如上命令保存为bat文件,在Window系统下设置开始时执行此bat文件。

2、Slave Node节点为Linux系统
类同Windows系统的Slave Node节点。只是启动命令方式有差异。

把agent.jar保存到/home/Jenkins,运行sudo java -jar agent.jar....,注意sudo采用管理员方式运行(否则提示Exception in thread "main" java.nio.file.AccessDeniedException:/opt/jenkins错误)。

四、创建任务,为任务指定Node调度策略                                                                                                                 
(1)Jenkins首页,New View创建一个自己视图。

(2)选择刚创建的视图,进入My View页面,New Job创建一个任务。

jenkins slave节点 oom jenkins slave工作原理_Jenkins_09

  (3)创建Job的页面,“General”下勾选“Restric where this project can be run”,填写Label Expression。

jenkins slave节点 oom jenkins slave工作原理_Windows_10

Jenkins通过节点的label标签来执行Jobs的Slave Node,一个标签可以关联多台不同命名的slave机器。

五、Jenkins的Master和Slave通信方式                                                                                                                             
常用的Master和Slave节点连接的方式是ssh或JNLP。

(1)ssh:对于Slave Node是linux系统,最方便的就是通过ssh启动jenkins节点,但这个的前提是Master和Slave之前能进行ssh连接。

(2)jnlp:jnlp连接有个好处就是不需Master和Slave之间能够ssh连接,只需能ping即可。Slave Node是windows的话,这个方式十分实用,因为有时候一些权限或者防火墙的原因,导致Master和Slave不能够ssh连接;还有一些未知的原因导致无法ssh到Slave Node。

如章节三所言,也可以安装Jenkins Plugins,支持更广泛的Slave Agent类型和连接。