背景
日常构建Jenkins任务中,会经常出现下面的情况:
(1)自动化测试执行需要消耗大量的 CPU 和内存资源,如果服务器上还有其他的服务,可能会造成卡顿或者宕机这样的情况;
(2)Web自动化测试代码需要在不同浏览器上面执行(兼容性测试),或者自动化测试代码比较多,执行速度非常缓慢。
Jenkins 提供了主从模式(Master/Slave) 解决这个问题。Master/Slave相当于Server与Agent。通过Master我们可以关联多个Slave从机来为不同的任务或相同的任务的不同配置服务。
默认我们使用Jenkins Master来构建任务。我们可以为Jenkins 配置多台Slave从机,当Slave从机和Jenkins服务建立连接之后,由Jenkins发指令给指定的Slave从机去运行任务,消耗的资源由Slave从机去承担。
添加Slave节点
在Jenkins中,Master和Slave都称为Node(节点),我们可以在Jenkins中配置多个Slave 节点。
进入Jenkins首页,选择Manage Jenkins -> Manage Nodes and Clouds -> New NodeManage Jenkins -> Manage Nodes and Clouds -> New Node,配置参考如下:
需要注意 Launch method 一定要开启 Jenkins的远程连接端口,否则Slave节点无法连接上Jenkins服务。这种连接用的是 JNLP4 协议, 这种协议是在 WebSocket + TLS 的基础上封装而成的长连接协议。可以在 Jenkins 的安全设置面板中开启:进入Jenkins首页-> Configure Global Security,选择如下配置
连接Slave节点
进入到Nodes管理页面,从Jenkins首页->Manage Jenkins->Manage Nodes and Clouds进入:
可以看到我们可以通过两种方式将Slave节点连接上Jenkins:
(1)Launch agent from browser在从机中通过浏览器方式启动
(2)Run from agent command line 在从机中通过运行命令行方式驱动
1. 浏览器方式连接
在需要作为从机的主机上通过浏览器访问上述页面,点击Launch图标将会在下载一个名为slave-agent.jnlp文件,下载完毕双击打开,初始化之后会显示已连接:
再次进入到节点管理页面,此时Jenkins显示Slave节点已连接上:
注意:Jenkins连接Slave节点需要一段时间,不会立即更新连接状态,我们需要多等待下。
2. 命令行方式连接
点击蓝色“agent.jar”链接,会下载一个名为agent.jar文件:
按照上述提示,在命令行终端输入对应命令,最后会提示已连接。
Jenkins任务配置Slave节点执行
进入到任务配置页面中,选择General对应配置指定对应从机:
再次构建任务通过Console Ouput控制台输出可以看到任务已经由Jenkins调度从机执行:
可能碰到的问题
在Jenkins任务开始构建之后发现出现如下的错误信息:
问题发生原因:
因为任务是在Slave节点执行,所以Jenkins需要Slave节点的环境变量(包括Git、JDK等等),而Jenkins 默认使用的是本身宿主机的环境变量。
解决方案:
进入到Slave节点的配置页面中,选择Node Properties -> Tool Locations,指定Git及JDK在从机上对应的路径