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

时间:2017-08-18 07:52:17

标签: oracle jenkins sqlplus

我正在通过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$1.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环境var。有什么想法吗?

记录:从码头图像运行jenkins

2 个答案:

答案 0 :(得分:1)

我知道这是一个旧线程,但这可能会使某人受益。就我而言,我确实需要将连接字符串添加到tnsnames.ora,但无需导出TNS_ADMIN。

答案 1 :(得分:0)

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会工作。

祝你好运!

比阿特