Jenkins 错误集锦
Jenkins 错误集锦
问题1、远程服务器无法执行 sudo 命令
报错信息如下:
no tty present and no askpass program specified
报错信息截图如下:
解決方案:
https://blog.csdn.net/qq_36792209/article/details/82695539
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 版本,再次编译看是否报错。