环境信息
Jenkins版本:Version 2.414.3
Agent版本:jenkins/inbound-agent(使用的是Kubernetes集群来提供Agent的方式,所以使用的是镜像)
https://hub.docker.com/r/jenkins/inbound-agent
此Agent是替换旧版本的jnlp-slave,已不再维护,官方推荐使用inbound-agent
现象
部署Maven Project类型的项目出现如下报错。
Maven项目配置如下。项目使用JDK 8进行构建
报错信息
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
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:425)
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
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.Maven35Main.main(Maven35Main.java:136)
at jenkins.maven3.agent.Maven35Main.main(Maven35Main.java:66)
ERROR: Failed to parse POMs
java.io.EOFException: unexpected stream termination
at hudson.remoting.ChannelBuilder.negotiate(ChannelBuilder.java:459)
at hudson.remoting.ChannelBuilder.build(ChannelBuilder.java:404)
at hudson.slaves.Channels.forProcess(Channels.java:121)
at hudson.maven.AbstractMavenProcessFactory.newProcess(AbstractMavenProcessFactory.java:298)
at hudson.maven.ProcessCache.get(ProcessCache.java:237)
at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:802)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:526)
at hudson.model.Run.execute(Run.java:1900)
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543)
at hudson.model.ResourceController.execute(ResourceController.java:101)
at hudson.model.Executor.run(Executor.java:442)
报错解读
使用了JDK8启动了jenkins job。但是jenkins Launcher是11编译的。
我们的版本是Version 2.414.3,确实是需要Java11才能启动Jenkins项目。
Jenkins服务器
查看Jenkins版本记录,大于2.357版本的Jenkins要求的JAVA运行时就是11了。
Jenkins requires Java 11 or newer
问题原因
Maven Integration | Jenkins plugin
因为是Maven Project项目,所以使用Maven Integration插件。
查看插件说明,新版本Jenkins,新版本的Maven Integration不支持JDK8了,最低只支持JDK11。
那我要编译jdk11以下的项目,比如jdk8,jdk7之类的项目,该如何做呢。
使用低版本的JDK运行项目,还会报如下错误。Jenkins若发现了低版本的JDK运行,会自动给你重试。
ERROR: ================================================================================
ERROR: Invalid project setup: hudson/maven/AbstractMavenProcessFactory$ConfigureOriginalJDK : Unsupported major.minor version 51.0
ERROR: [JENKINS-18403][JENKINS-28294] JDK 'j6' not supported to run Maven projects.
ERROR: Maven projects have to be launched with a Java version greater or equal to the minimum version required by the controller.
ERROR: Use the Maven JDK Toolchains (plugin) to build your maven project with an older JDK.
ERROR: Retrying with agent Java and setting compile/test properties to point to /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/.
ERROR: ================================================================================
但是,到了高版本的Jenkins+高版本的Agent(inbound-agent),人家不给你重试了。直接中断了。这时候就需要选择其它方案。
这边明确说明。Jenkins requires Java 11 or newer
Controller(Jenkins Master)jdk若是11(高版本的Jenkins满足)
Agent是jdk8,则会报如下错误。
解决方案
不使用这个插件了,直接创建FreeStyle类型的项目,再调用Maven命令编译打包就行了。
将原有的项目
Maven Project类型的项目,更换为FreeStyle类型的项目,重新配置一遍就行
再调用maven step进行构建即可