执行shell脚本并将其输出用作下一个gradle任务

时间:2016-06-28 08:40:11

标签: gradle build gradle-ssh-plugin javaexec-gradle-plugin

我正在使用gradle进行构建和发布,因此我的gradle脚本执行shell脚本。 shell脚本输出一个ip地址,该地址必须作为我下一个gradle 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'
}
}
}

但会导致错误&#34;

What went wrong:
Execution failed for task ':checkWebServers1'.
 java.net.UnknownHostException: {exitValue=0, failure=null}"

任何人都可以帮我使用正确语法的输出变量或提供一些可以帮助我的提示。

提前致谢

1 个答案:

答案 0 :(得分:0)

它无法正常工作的原因是,exec来电回复为ExecResult(此处为JavaDoc description)并且它是不是执行的文本输出。

如果您需要获取文本输出,那么您必须指定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()

这里只需要输出的第一行。