美好的一天, 我有一个像jenkins那样运行的groovy脚本。
//checkoutObjects
def command =""
for (i = 0; i <numOfObj; i++) {
command = "svn export -r "+DeploySetArray[i][1]+" "+DeploySetArray[i][0]+" D:/Jenkins/workspace/mmb.database.deploy"
//println command.execute().text
def proc = command.execute()
proc.waitFor()
println "Process exit code: ${proc.exitValue()}"
println "Std Err: ${proc.err.text}"
println "Std Out: ${proc.in.text}"
}
上面的代码段工作得很好,检查了我所有的SVN对象。现在,以下部分是我遇到问题的地方。
command = "sqlplus mastermind/***@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=***)(PORT=1521))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=***))) @D:/BuildScripts/MMB/gather_invalids.sql"
def proc = command.execute()
println "This line is printed"
proc.waitFor()
println "This line is not printed"
println "Process exit code: ${proc.exitValue()}"
println "Std Err: ${proc.err.text}"
println "Std Out: ${proc.in.text}"
出于某种原因,当试图通过Jenkins运行这个groovy脚本,或直接从groovy控制台运行它等待这一行。但是,如果我准确地提取sqlplus命令并在CL上自己运行它,它会在几秒钟内返回。我已经找到了一些我认为很接近的答案,但看起来很奇怪它在命令行上工作得很好但不是通过groovy。任何建议或指示将不胜感激。
谢谢!
编辑:我尝试过使用其他命令行工具&#34; sql&#34;而不是&#34; sqlplus&#34;。脚本仍然挂在同一个地方,让我觉得它与groovy 有关答案 0 :(得分:0)
找到了一个解决方案,但我的问题并不是很常见。问题出在命令行工具'sql'和'sqlplus'上。当使用要执行的脚本调用这些程序时,它们将运行脚本,然后不退出提示进行更多交互。这导致脚本在等待更多输入时挂起。通过我的命令“exit | sqlplus ...”解决了这个问题。 这个链接对我有所帮助。 https://serverfault.com/questions/87035/run-oracle-sql-script-and-exit-from-sqlplus-exe-via-command-prompt