新版本Jenkins(Version>2.357)兼容低版本JAVA项目部署

本文描述了一个在Jenkins2.414.3环境中使用MavenProject类型项目遇到的错误,因JenkinsLauncher使用了Java11编译,导致JDK8项目无法正常构建。解决方法是切换到FreeStyle项目并直接调用Maven命令。
摘要由CSDN通过智能技术生成

环境信息

 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进行构建即可

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值