groovy .execute wait для висит в Jenkins, но не CL - PullRequest
0 голосов
/ 26 апреля 2018

Добрый день, У меня есть отличный скрипт, работающий на работе Дженкинса, вот так.

//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 или при запуске непосредственно из отличной консоли Он ожидает на этой строке. Однако, если я извлекаю команду sqlplus точно и запускаю ее на CL, она возвращается через несколько секунд. Я посмотрел несколько ответов, которые мне показались близкими, но кажется странным, что он отлично работает в командной строке, а не в Groovy. Буду признателен за любые советы или указатели.

Спасибо!

РЕДАКТИРОВАТЬ: я пытался использовать другой инструмент командной строки "sql" вместо "sqlplus". Скрипт все еще висит на том же месте, заставляя меня думать, что это как-то связано с groovy

1 Ответ

0 голосов
/ 30 мая 2018

Нашел решение, моя проблема не была отличной, хотя. Проблема была с инструментами командной строки 'sql' и 'sqlplus'. Когда эти программы вызываются со сценарием для выполнения, они запускают сценарий, а затем без выхода из запроса на дальнейшее взаимодействие. Это привело к зависанию скрипта, пока он ожидал ввода. Я справился с этим, поставив перед моей командой "exit | sqlplus ..." Эта ссылка - то, что помогло мне. https://serverfault.com/questions/87035/run-oracle-sql-script-and-exit-from-sqlplus-exe-via-command-prompt

...