Выполнение сценария оболочки и использование его вывода в качестве входных данных для следующей задачи gradle
Я использую gradle для сборки и выпуска, поэтому мой скрипт gradle выполняет скрипт оболочки. Сценарий оболочки выводит IP-адрес, который должен быть предоставлен в качестве входных данных для моей следующей задачи ssh. Я могу получить вывод и распечатать на консоли, но не могу использовать этот вывод в качестве входных данных для следующей задачи.
remotes {
web01 {
def ip = exec {
commandLine './returnid.sh'
}
println ip --> i am able to see the ip address on console
role 'webServers'
host = ip --> i tried referring as $ip '$ip' , both results into syntax error
user = 'ubuntu'
password = 'ubuntu'
}
}
task checkWebServers1 << {
ssh.run {
session(remotes.web01) {
execute 'mkdir -p /home/ubuntu/abc3'
}
}
}
но это приводит к ошибке
What went wrong:
Execution failed for task ':checkWebServers1'.
java.net.UnknownHostException: {exitValue=0, failure=null}"
Может кто-нибудь, пожалуйста, помогите мне использовать выходную переменную в правильном синтаксисе или предоставить несколько советов, которые могут мне помочь.
заранее спасибо
1 ответ
Причина, по которой это не работает, заключается в том, что exec
обратный звонок ExecResult
(вот описание JavaDoc), а не текстовый вывод выполнения.
Если вам нужно получить текстовый вывод, то вам нужно указать standardOutput
собственность exec
задача. Это можно сделать так:
remotes {
web01 {
def ip = new ByteArrayOutputStream()
exec {
commandLine './returnid.sh'
standardOutput = ip
}
println ip
role 'webServers'
host = ip.toString().split("\n")[2].trim()
user = 'ubuntu'
password = 'ubuntu'
}
}
Просто обратите внимание, что значение ip по умолчанию будет иметь многострочный вывод, включая саму команду, поэтому его необходимо проанализировать, чтобы получить правильный вывод. Для моей машины Win это можно сделать следующим образом:
ip.toString().split("\n")[2].trim()
Здесь требуется только первая строка вывода.