一、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 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 Node
在Jenkins界面选择“Manage Jenkins”->“Manage Nodes and Clouds”->“New Node
(1)配置Node Name
(2)配置Agent类型:选择永久模式(Permanent Agent)。更多Agent种类请安装类插件后可见。
(3)接下来配置Agent信息:
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
更多Launch Method种类请在Manage Jenkins->Manage Plugins->Available界面安装(图片)类插件后可见:
添加完毕后,在Jenkins主界面,可以看到新添加的Slave Node,但是红叉表示此时的Slave并未与Master建立起联系。节点的“of excutors”通道数可以在此界面上看到:
接下来进一步做Slave Node配置。
1、Slave Node节点为Windows系统
登录Slave Node主机,浏览器中通过Jenkins master节点的URI登录系统,在Manage Jenkins->Manage Nodes and Clouds页面点击刚新建的节点,进入如下界面:
方式一:点击上图中的 “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创建一个任务。
(3)创建Job的页面,“General”下勾选“Restric where this project can be run”,填写Label Expression。
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类型和连接。