postgresql - Jenkins ExtendedChoicePlugin:无法从 postgres db 中获取选择
问题描述
我正在尝试使用ExtendedChoiceParameter插件在一段 groovy 脚本下运行,但我看到一个空列表。
@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()
}
上面的代码抛出异常(在 jenkins.log 文件中检查)
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
当我删除@Grab时,它会抛出错误(这很常见,因为类路径中没有postgres jar)
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 添加到类路径或如何使 @Grab 与插件一起使用。我还尝试了使用自由式作业的相同脚本(我可以选择一个 groovy 版本,但插件没有选项),它工作正常。
任何想法?
更新 1:作为一种解决方法,我创建了一个包装 Java 程序来运行给定的查询(作为参数)并从中创建 jar。我将 jar 作为 grooy 脚本的命令运行,并且有效。这是 groovy 脚本 -
def command = ["java", "-jar", "/mnt/d/repos/java-postgres-cli/target/java-postgres-cli-0.1-jar-with-dependencies.jar",
"localhost", "5432", "postgres", "postgres", "thedb", "select * from thetable"]
def sout = new StringBuilder()
def serr = new StringBuilder()
def proc = command.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
if (serr.length() != 0) {
return serr
}
return sout
解决方案
要在类路径中添加 jar,您可以将 jar 文件复制到用于运行 jenkins 的 jdk 中。
放置 jar 的路径 - {JDK_PATH}/jre/lib/ext/
推荐阅读
- javascript - React-Redux:mapStateToProps 内部的逻辑不会导致重新渲染
- servicestack - ServiceStack /types/csharp 在 v5.7 中生成无效的属性签名
- html - CSS静态文件未在Django中加载
- python - python根据另一个字符串变量创建字符串变量(包含)
- mongodb - mongodb 查询不适用于 Atlas 中的集合
- python - Spacy NER - 训练仅具有实体集合的模型
- python-3.x - 我有什么遗漏吗,代码在 1/3 的数据上不起作用,在 2/3 上它可以正常工作?
- git - GitHub API:从作为安装验证的模板创建存储库
- google-colaboratory - 如何将 Kaggle 的数据集下载到 Colab
- swift - 将 JSValue 转换为类型化数组