解决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发布!!!!!!!

相关推荐
wrx繁星点点6 分钟前
事务的四大特性(ACID)
java·开发语言·数据库
IT学长编程14 分钟前
计算机毕业设计 Java酷听音乐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·音乐系统·计算机毕业设计选题
cuisidong199722 分钟前
如何在 Kali Linux 上安装 Google Chrome 浏览器
linux·运维·chrome
IT学长编程31 分钟前
计算机毕业设计 基于协同过滤算法的个性化音乐推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·毕业论文·协同过滤算法·计算机毕业设计选题·个性化音乐推荐系统
小小娥子36 分钟前
Redis的基础认识与在ubuntu上的安装教程
java·数据库·redis·缓存
几何心凉43 分钟前
已解决:org.springframework.web.HttpMediaTypeNotAcceptableException
java
华农第一蒟蒻1 小时前
Java中JWT(JSON Web Token)的运用
java·前端·spring boot·json·token
两点王爷1 小时前
使用WebClient 快速发起请求(不使用WebClientUtils工具类)
java·网络
光通信学徒1 小时前
ubuntu图形界面右上角网络图标找回解决办法
linux·服务器·ubuntu·信息与通信·模块测试
计算机学姐1 小时前
基于SpringBoot+Vue的高校运动会管理系统
java·vue.js·spring boot·后端·mysql·intellij-idea·mybatis