一、master-slave
日常构建Jenkins任务中,会经常出现下面的情况:
-
自动化测试需要消耗大量的 CPU 和内存资源,如果服务器上还有其他的服务,可能会造成卡顿或者宕机这样的情况;
-
Jenkins 平台上除了这个项目,还有其他项目需要构建,如果同一时间构建大量的任务会造成多个任务抢占资源的情况。
Jenkins 提供了主从模式(master-slave) 解决这个问题。我们可以为 jenkins 配置多台slave从机,当slave从机和Jenkins服务建立连接之后,由Jenkins发指令给指定的slave从机去运行任务,消耗的资源由slave从机去承担。
二、Node节点
1、添加节点 Manage Jenkins -> Manage Nodes and Clouds -> New Node
(1)配置Node Name
(2)配置Agent类型:选择永久模式(Permanent Agent)
(3)接下来配置Agent信息:
- Name:Slave机器的名字
- Description:描述 ,不重要 随意填
- Number of executors:允许在这个节点上并发执行任务的数量,即同时可以下发多少个Job到Slave上执行,一般设置为 cpu 支持的线程数。[注:Master Node也可以通过此参数配置Master是否也执行构建任务、还是仅作为Jenkins调度节点]
- Remote root directory:用来放工程的文件夹,jenkins master上设置的下载的代码会放到这个工作目录下。
- Lables:标签,用于实现后续Job调度策略,根据Jobs配置的Label选择Salve Node
- Usage:选择“Only build Jobs with Label expressiong matching this Node”
- Launch method:这里我选择了Launch agent by connecting it to the master
2、添加完成后可以看到节点页面信息
红叉表示此时的Slave并未与Master建立起联系
3、连接从节点
两种方式都可以连接slave从机
-
1、下载agent插件
-
2、在命令行执行提示的两段命令
4、全局安全设置 Manage Jenkins——Security
需要注意 Launch method 一定要开启 jenkins 的远程连接端口,否则slave从机无法连接上Jenkins服务。
这种连接用的是 JNLP4 协议, 这种协议是在 WebSocket + TLS 的基础上封装而成的长连接协议。可以在jenkins 的安全设置面板中开启:可以用随机/docker指定的50000
5、项目中应用
任务配置中选择对应slave从机构建
⚠️可能会出现XXX not found错误
解决方案:在node节点配置工具路径
⚠️构建命令,要写全路径 否则会报错 mvn not found
三、Jenkins 添加节点Node报错
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
从文字上看第一个错误类型是属于不支持的字节码版本,那就想到当前jenkins默认是用的java 11版本,而目标节点机器上用的java 8,字节码版本不兼容,我试过把这个jenkins的jdk改为11,不行,启动报错,那就只好改目标机器上的java版本了,于是在目标节点机器下载了java 11并把版本选择设置默认为11版本,然后重新laugh Node后节点上线成功。