跳至主要內容

Jenkins 错误集锦

悟空约 566 字大约 2 分钟...

Jenkins 错误集锦

问题1、远程服务器无法执行 sudo 命令

报错信息如下:

no tty present and no askpass program specified

报错信息截图如下:

image-20240617145216860
image-20240617145216860

解決方案:

https://blog.csdn.net/qq_36792209/article/details/82695539open in new window

jenkins ALL=(ALL) NOPASSWD:ALL

crm ALL=(ALL) NOPASSWD: ALL

2、Jenkins JDK 版本与本地开发的 JDK 版本不匹配

Jenkins 多版本 JDK 编译打包。

背景

Jenkins 打包时提示如下错误:

package jdk.nashorn.internal.objects.annotations does not exist

在 IDEA 中查看这个 Java 类,虽然引用了这个类,但是没有报错。

原因

本地开发的时候,IDEA 工具配置 Java 版本为 1.8.0_191

而这个Nashorn 类是Java的一个JavaScript运行时,自Java 11起已经不再是 JDK 的一部分,而是作为一个独立模块提供。

因 Jenkins 配置的是 Java 17,所以编译会报错。

解决方案

如果想要编译通过,有如下两种方式:

  • 添加Nashorn模块的依赖。
  • Jenkins 配置 Java 的版本为 Java 8。

那到底用 OracleJDK8 还是用 OpenJDK8 呢?

这个需要看正式环境上用的是哪种。

我们的环境使用 docker 部署的,通过如下命令查看 JDK 版本。

sudo docker images
sudo docker inspect <image id>

那我们就下载一个 OpenJDK8-amd64 版本。版本号为 8u111。

下载地址:

https://mirror.tuna.tsinghua.edu.cn/Adoptium/8/jdk/x64/linux/

这里 amd64 和 x86_64, x64 可以认为是一样的。

然后将下载好的 jdk 解压放到 Jenkins 服务器上。如下图所示:

接着配置下 jenkins JDK 工具。如下图所示:

然后在 jenkins pipeline 脚本中配置下 tools 节点。如下图所示:

jdk 'java8'

这里的 java8 和配置的 JDK 别名一致。

最后在编译之前把 Jenkins 使用的 JDK 版本打印出来:

我们可以看到部署过程中,将 JDK 版本打印出来了,对应的版本为 OpenJDK 1.8,也就是 JDK8。

调试小技巧:在 Jenkins workspace 调试编译。

可以直接到 Jenkins 服务器上的 workspace 里面的具体项目中,还可以手动修改目录中 java 文件。

通过 java -version 查看 java 版本,执行 mvn clean package 看编译是否报错。

然后通过配置 Java 环境变量切换 Java 版本,再次编译看是否报错。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.3.0