Jenkins - Sqlplus 插件:无法连接到 Oracle 数据库。 TNSNAMES.ORA 失踪

Jenkins - Sqlplus plugin: Cannot connect to oracle database. TNSNAMES.ORA missing

我正在通过 jenkins,但我在工作的最后一步尝试连接到远程 oracle 数据库时卡住了。

像 ORACLE_HOME 和 LD_LIBRARY_PATH 这样的环境变量是可以的,sqlplus 是 运行 正确的。连接字符串看起来也不错,我确实在同一台机器上通过命令行使用相同的参数连接,但不是在工作中。

跟踪如下:

SQL*Plus: Release 12.2.0.1.0 Production

testing directory /usr/lib/oracle/12.2/client64
--------------------------------------------------------------------------
Using ORACLE_HOME =/usr/lib/oracle/12.2/client64
--------------------------------------------------------------------------
Running defined script on dweb/********@10.10.20.52:1521/*******
Temp script: /tmp/temp-script-15029865208104609348613017529755.sql
--------------------------------------------------------------------------
ORACLE_HOME = /usr/lib/oracle/12.2/client64
LD_LIBRARY_PATH = /usr/lib/oracle/12.2/client64/lib:/usr/lib/oracle/12.2/client64
java.lang.RuntimeException: TNSNAMES.ORA missing!
    at org.jenkinsci.plugins.sqlplusscriptrunner.SQLPlusRunner.invoke(SQLPlusRunner.java:231)
    at org.jenkinsci.plugins.sqlplusscriptrunner.SQLPlusRunner.invoke(SQLPlusRunner.java:16)
    at hudson.FilePath.act(FilePath.java:998)
    at hudson.FilePath.act(FilePath.java:976)
    at org.jenkinsci.plugins.sqlplusscriptrunner.SQLPlusRunnerBuilder.perform(SQLPlusRunnerBuilder.java:98)
    at hudson.tasks.BuildStepMonitor.perform(BuildStepMonitor.java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:735)
    at hudson.model.Build$BuildExecution.build(Build.java:206)
    at hudson.model.Build$BuildExecution.doRun(Build.java:163)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:490)
    at hudson.model.Run.execute(Run.java:1735)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:405)
ERROR: TNSNAMES.ORA missing!
Finished: FAILURE

我什至尝试设置 ORACLE_SID 环境变量,结果相同。有什么想法吗?

备案:运行 jenkins 来自 docker 图片

https://wiki.jenkins.io/display/JENKINS/SQLPlus+Script+Runner+Plugin

难道这个插件(SQLPlusRunner)只支持本地命名(TNS)? 在这种情况下,您将必须创建一个 tnsnames.ora 文件放在您最喜欢的文件夹中并设置 export TNS_ADMIN=/my/favorite/folder

cat tnsnames.ora
MY_TNS_ALIAS=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myip)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=MY_SERVICE_NAME)))

现在您可以配置连接了

instance: <MY_TNS_ALIAS>

提示:在继续使用 jenkins 之前,确保通过 sqlplus (CLI) 成功连接。

对于您的情况,我认为 Oracle Runtime Client 是更好的安装选项。 Instantclient 会工作。

祝你好运!

比亚特

我知道这是一个旧线程,但这可能会使某些人受益。在我的例子中,我确实需要将连接字符串添加到 tnsnames.ora,但不需要导出 TNS_ADMIN.