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 查询)

如何在Jenkins,Git和Gradle的持续集成环境中处理用户名/密码? [关闭]

sql模糊查询

sql 用于获取数据库中所有文件组的SQL查询

如何在 DATAGRIP IDE 中添加用于生成 excel 文件的 SQL 查询?