Jenkins 文件中用于 SQL 查询的错误处理
Posted
技术标签:
【中文标题】Jenkins 文件中用于 SQL 查询的错误处理【英文标题】:Error Handling in Jenkins file for SQL query 【发布时间】:2021-10-14 17:38:12 【问题描述】:在我的 jenkinsfile 中,当我执行以下 sql 语句并返回 returnStatus 时,无论 sql 语句通过还是失败,它总是返回“0”
def user_code= sh(script: """sqlplus "a/b/c/test.sql" """, returnStatus: true)
if ( "$user_code" != "0")
error("sql statement failed with status code $user_code")
else
println "successfull"
我参考了这个页面Sql*plus always returns exit code 0? 它建议在 SQL Query 中处理此问题,但我有限制,我必须在 Jenkinsfile 中实现它。
-
我也尝试过 returnStdout: true 但它会抛出垃圾输出。
有人可以建议我如何在 jenkinsfile 中处理这个问题。
【问题讨论】:
【参考方案1】:您可以尝试在您的 test.sql 开头的标题中使用以下行生成新的 sql
WHENEVER SQLERROR EXIT SQL.SQLCODE
WHENEVER OSERROR EXIT
sh(script: """sqlplus "a/b/c/test_with_header.sql" """, returnStatus: true)
【讨论】:
感谢您的回复,但正如我之前在问题中所述,我不拥有数据库文件。因此,我无法添加任何 SQL 语句或文件。 以下是它在我们系统中的工作方式,以帮助我了解您的团队实施的详细信息 1. Jenkins 构建使用 docker 运行(包含所有已安装的程序和测试数据集) 2.我们使用 Maven+Liquebase 3 在 docker 实例上下载并部署所有 src 文件。为 DB 运行所有测试要运行它们,我们有函数,我们只传递 sqls 对于这些 sqls,我们为 sqlplus 添加语句集并运行修改后的查询.函数看起来像 db_call('select * from dual') 并给出输出 + 错误代码。所以访问文件系统你应该有以上是关于Jenkins 文件中用于 SQL 查询的错误处理的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins/Psexec - 当我尝试在虚拟机上运行批处理文件时出现错误代码 1
在脚本中迭代/循环 Spark parquet 文件会导致内存错误/堆积(使用 Spark SQL 查询)