问题描述
我试图在带有 ExtendedChoiceParameter 插件的 groovy 脚本下面运行,但我看到一个空列表。
container left outer join loss_reasons
以上代码抛出以下异常(在 jenkins.log 文件中检查)
@GrabConfig(systemClassLoader = true)
@Grab(group = 'org.postgresql',module = 'postgresql',version = '9.4-1205-jdbc42')
import groovy.sql.sql
def url = 'jdbc:postgresql://localhost:5432/mydb'
def user = 'postgres'
def password = 'postgres'
def driver = 'org.postgresql.Driver'
def sql = sql.newInstance(url,user,password,driver)
try {
def output = []
sql.eachRow("select env from customers_customer") { row ->
output.push(row[0])
}
return output.sort()
} finally {
sql.close()
}
当我删除 @Grab 时,它会抛出以下错误(这很常见,因为类路径中没有 postgres jar)
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup Failed:
General error during conversion: No suitable ClassLoader found for grab
java.lang.RuntimeException: No suitable ClassLoader found for grab
我不知道如何将 jar 添加到类路径或如何使 @Grab 与插件一起使用。我也尝试过在自由式作业中使用相同的脚本(我可以选择 groovy 版本,但插件没有选项)并且它工作正常。
有什么想法吗?
更新 1:作为一种解决方法,我创建了一个包装器 java 程序来运行给定的查询(作为参数)并从中创建 jar。我正在运行 jar 作为来自 grooy 脚本的命令并且有效。这是 groovy 脚本 -
2021-06-24 08:18:18.194+0000 [id=170] SEVERE c.c.h.p.e.ExtendedChoiceParameterDeFinition#executeGroovyScriptAndProcessGroovyValue: org.postgresql.Driver
java.lang.classNotFoundException: org.postgresql.Driver
解决方法
要在类路径中添加 jar,您可以将 jar 文件复制到运行 jenkins 时使用的 jdk 中。
放置 jar 的路径 - {JDK_PATH}/jre/lib/ext/