You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins升级到Java11后Pipeline用jtds查询MS SQL Server失败求助

Jenkins 2.312(Java 11环境)加载jtds JDBC驱动失败解决方案

方案1:Pipeline内手动加载驱动(无需修改容器配置,推荐)

该方案直接在流水线代码中处理类加载逻辑,适配Jenkins Pipeline的类加载机制,不需要修改容器启动参数。
操作步骤:

  1. 提前将jtds-1.3.1.jar上传到Jenkins主节点/任务运行节点的固定路径,例如/var/jenkins_home/public_libs/
  2. 修改你的流水线代码,在调用JDBC逻辑前手动加载jar包并注册驱动,示例代码如下:
import java.sql.DriverManager
import groovy.sql.Sql
import java.io.File

// 手动将jtds jar添加到当前类加载器
this.getClass().getClassLoader().addURL(new File("/var/jenkins_home/public_libs/jtds-1.3.1.jar").toURI().toURL())
// 显式注册JDBC驱动
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance()

// 后续原有逻辑不变
con = DriverManager.getConnection('jdbc:jtds:sqlserver://servername', 'user', 'password');
stmt = con.createStatement();

注意:如果流水线运行在动态Agent上,需要确保Agent镜像中已经预置了对应路径的jtds jar包

方案2:修改Docker镜像配置,使用Java 11扩展路径替代原jre/lib/ext

Java 11移除了原有jre/lib/ext扩展目录,可通过jdk.launcher.ext.path系统属性指定自定义扩展目录,还原Java 8下的加载逻辑:

  1. 自定义Jenkins Docker镜像,将jtds-1.3.1.jar内置到固定路径,例如/opt/java_ext_libs/
  2. 修改容器启动的环境变量,添加系统属性参数:
ENV JAVA_OPTS="-Djdk.launcher.ext.path=/opt/java_ext_libs"

该方案配置一次全局生效,所有流水线都可以直接使用原有JDBC逻辑,无需修改代码。

方案3:改用命令行工具执行查询并解析结果

如果不想修改类加载相关配置,可以使用SQL Server官方命令行工具直接导出JSON格式结果,规避Groovy类加载问题:

  1. 在Jenkins节点/Agent镜像中安装sqlcmd工具
  2. 执行查询时使用SQL Server自带的FOR JSON语法直接输出JSON格式结果,示例命令:
sqlcmd -S servername -U user -P password -Q "SELECT * FROM 表名 FOR JSON PATH, INCLUDE_NULL_VALUES" -h -1 -y 0 > query_result.json
  1. 后续在流水线中直接读取query_result.json文件解析内容即可。

内容的提问来源于stack exchange,提问作者user367341

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:09:04