2016-06-28 5 views
1

私はgradleを使ってビルドとリリースを行っているので、グラデーションスクリプトはシェルスクリプトを実行します。シェルスクリプトは、次のgradle sshタスクへの入力として提供されるべきIPアドレスを出力します。私は、出力を取得してコンソールに印刷できますが、この出力を次のタスクの入力として使用することはできません。シェルスクリプトを実行し、その出力を次のgradleタスクへの入力として使用する

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}" 

」エラーになります。事前

感謝

答えて

0

それがうまくいかない理由は、execコールリターンがExecResult(ここはJavaDoc descriptionです)であり、そうではありません実行のテキスト出力。

テキスト出力を取得する必要がある場合は、execタスクのstandardOutputプロパティを指定する必要があります。コマンド自体が含まれ、デフォルトでは、IPの値は複数行の出力を持つことになり、

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.toString().split("\n")[2].trim() 

ここでは、出力の最初の行だけが使用されます。

+0

ありがとう@Stanislav。私はdef値= ip.toString()。split( "\ n")と割り当てられたhost = values [0]を使って動作させました。 – sugar

関連する問題