解决linux jenkins要求JDK版本与项目版本JDK不一致问题

背景--问题描述: 新入职公司,交接人说jenkins运行有问题,现在都是手动发布,具体原因让我自己看(笑哭)。我人都蒙了,测试环境都手动发布,那不是麻烦的要死!

接手后,发现是jenkins(版本2.422)要求jdk版本最低11,项目使用的则是1.8。两者没法同时满足,升级jdk是不现实的。后来发现测试环境有两套jdk,一套JDK1.8,一套JDK17,我想这套jdk17应该就是为了解决jenkins对JDK版本要求的问题的吧!

尝试处理方式一: 配置Linux JDK运行环境为JDK17,启动jenkins(JDK8无法启动),启动成功。切换配置JDK到1.8,在jenkins中配置项目-->发布,竟然成功了(此种方式不可取)。原因一: 后续在添加项目时无论如何都不能发布成功,摸不着头脑!原因二: 在jenkins配置的shell脚本中,添加一行 echo java -version 结果打印JDK17(大坑!!!!!!),这环境都变了,后面很容易出现大问题。

一、解决方式:

jenkins是war包(war包也可以java -jar启动呦),启动时指定JDK启动就可以了,发布时,打包命令依赖的当前环境配置的JDK版本。

shell 复制代码
# 指定使用jdk17版本启动jenkins,环境变量/etc/profile配置的是1.8版本
nohup  /home/java/jdk-17.0.7/bin/java -jar -Xms512M -Xmx2048M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=768M jenkins.war  >  runtime.log  2>&1  &

二、实际遇到问题:

方式一的jenkins报错问题:

shell 复制代码
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.774 s
[INFO] Finished at: 2024-06-12T09:19:29+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project business-core-redis: 
Fatal error compiling: java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x5ff00507) cannot access class 
com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) 
because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x5ff00507 -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <args> -rf :business-core-redis

编译失败,但是在jenkins拉取项目的位置执行mvn clean package -Dmaven.skip.test=true,确可以正常编译打包。

在jenkins配置的shell中添加一行 echo java -version 结果打印

shell 复制代码
java version "17.0.7" 2023-04-18 LTS
Java(TM) SE Runtime Environment (build 17.0.7+8-LTS-224)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.7+8-LTS-224, mixed mode, sharing)

由此看来还是JDK版本的问题。

三、配置Webhooks自动发布

上面已经给出处理方式,下面是是记录jenkins配置及git版本管理工具(gogs)配置Webhooks自动发布。
第一步:New Item

第二步:Enter an item name(创建待发布项目名称)-->选择Freestyle project--> 点击ok

第三步:添加项目描述,勾选git管理

第四步:配置git仓库

第五步:添加shell配置

第六步:填写shell-->保存

shell 复制代码
#!/bin/bash

echo `java -version`
BUILD_ID=DONT_KILL_ME
tell(){
	if [ $? -eq 0 ]
    then
        echo "执行成功"
    else
        echo "执行失败"
    fi
}
echo '正在杀死后台的进程'
kill -9 `ps -ef | grep  business-jyb-system-backend.jar  | grep -v grep | awk '{print $2}'`
tell
echo '开始移除原来项目的jar包'
rm -f /home/rj/development/tongcheng-jyb/business-jyb-system-backend.jar
cd /root/.jenkins/workspace/business-jyb-system-backend-test
echo '开始打包项目'
mvn clean package -Dmaven.skip.test=true
echo '开始复制打包好的jar包到部署目录'
cp -p /root/.jenkins/workspace/business-jyb-system-backend-test/business-system/business-system-service/target/business-jyb-system-backend.jar  /home/rj/development/tongcheng-jyb/business-jyb-system-backend.jar
echo '移动完成'
cd  /home/rj/development/tongcheng-jyb
sh start.sh

第七步:配置gogs自动发布

shell 复制代码
# Payload URL配置内容,
# 其中链接为jenkins项目访问地址
# job= 后面的内容为 jenkins总配置的项目名(即第二步:Enter an item name)
http://xxxx.xxxx.com/gogs-webhook/?job=business-jyb-system-backend

保存后,点击当前页面Payload URL 修改-->Test Delivery测试发送请,查看jenkins中是否执行了一次构建项目

此时大功告成,每当有代码提交就会出发webhook就会被触发调用jenkins发布!!!!!!!

相关推荐
qq_4336184441 分钟前
shell 编程(五)
linux·运维·服务器
是小崔啊1 小时前
开源轮子 - EasyExcel02(深入实践)
java·开源·excel
myNameGL2 小时前
linux安装idea
java·ide·intellij-idea
青春男大2 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
lifeng43212 小时前
Jenkins集成部署(图文教程、超级详细)
运维·jenkins
HaiFan.2 小时前
SpringBoot 事务
java·数据库·spring boot·sql·mysql
我要学编程(ಥ_ಥ)2 小时前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先
music0ant2 小时前
Idea 添加tomcat 并发布到tomcat
java·tomcat·intellij-idea
计算机徐师兄3 小时前
Java基于SSM框架的无中介租房系统小程序【附源码、文档】
java·微信小程序·小程序·无中介租房系统小程序·java无中介租房系统小程序·无中介租房微信小程序
源码哥_博纳软云3 小时前
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台