随着公司产品线不断增加,在一台服务器上构建多个项目无疑会带来很大负载,本篇将实践如何利用jenkins分布式来构建job,当job量足够大的时候,此举可以有效的缓解jenkins-master上的压力。
2.环境准备IP | 操作系统 | 功能 |
192.168.50.72 | Centos7 | jenkins-master |
10.20.32.183 | Centos7 | jenkins-slave(无需安装jenkins) |
10.20.32.187 | Centos7 | 被部署端 |
软件 | 路径 | 描述 |
JDK | /opt/idss/jenkins/jdk | /opt/idss/jenkins为自定义远程目录 |
MAVEN | /home/install/apache-maven-3.6.3 | |
GIT | /usr/bin/git |
4.1 在jenkins上点击 “系统管理”--->“管理节点”--->“新建节点”,填写节点名称,勾选选项,点击ok开始新建节点
4.2 配置信息如下
配置介绍:
名称:节点的名称
并发构建数:使用处理器个数作为其值会是比较好的选择(可以点击后面的?号来查看详细信息)设置为0即表示不删除该节点的配置但是不启动该节点
远程工作目录:操作服务器的目录
标签:为节点设置标签(在job配置中使用)
用法:选择尽可能使用的话,在构建job的时候会优先在该节点上构建;选择绑定job的话,需要在运行的节点中指定从节点.
启动方式:这里是选择通过的ssh,输出机器的用户名和密码即可登录
Host Key Verification Strategy:选择不验证(non verifying verification strategy)
可用性:尽量保持代码在线(这里仅仅做测试,不考虑性能消耗..)
接下来要在节点属性中添加一些工具列表,本次实验至少需要jdk、maven、git,因此必须得在这里进行配置,地址选择对应slave服务器上的地址
4.3 Credentials配置如下
4.4 查看节点连接状态
5.构建job配置在job-限制项目的运行节点输入设置的节点标签,配置完成后保存,点击构建即可
6. 异常处理 Jenkins的slave异常:Exception in thread "main" java.lang.ClassNotFoundException: hudson.remoting.Launcher当任务分配到slave上执行时,报如下错误:
Parsing POMs Established TCP socket on 38257 maven33-agent.jar already up to date maven33-interceptor.jar already up to date maven3-interceptor-commons.jar already up to date [b012ef95d917292e062fe3d70c7a9b01] $ java -cp /var/lib/jenkins/maven33-agent.jar:/usr/install/apache-maven-3.3.9/boot/plexus-classworlds-2.5.2.jar:/usr/install/apache-maven-3.3.9/conf/logging jenkins.maven3.agent.Maven33Main /usr/install/apache-maven-3.3.9 /var/lib/jenkins/slave.jar /var/lib/jenkins/maven33-interceptor.jar /var/lib/jenkins/maven3-interceptor-commons.jar 38257 Exception in thread "main" java.lang.ClassNotFoundException: hudson.remoting.Launcher at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50) at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239) at jenkins.maven3.agent.Maven33Main.main(Maven33Main.java:133) at jenkins.maven3.agent.Maven33Main.main(Maven33Main.java:64)
ERROR: Failed to parse POMs java.io.EOFException: unexpected stream termination at hudson.remoting.ChannelBuilder.negotiate(ChannelBuilder.java:365) at hudson.remoting.ChannelBuilder.build(ChannelBuilder.java:310) at hudson.slaves.Channels.forProcess(Channels.java:115) at hudson.maven.AbstractMavenProcessFactory.newProcess(AbstractMavenProcessFactory.java:294) at hudson.maven.ProcessCache.get(ProcessCache.java:236) at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:798) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:534) at hudson.model.Run.execute(Run.java:1730) at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:544) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:405) 搜索了下解决办法:说是重连下slave。照做,问题解决。看下master连接slave的日志信息,我想原因应该是我修改过slave的环境变量hostname。不知道修改其他环境变量是否也会有同样的影响。