2010-08-14 39 views
0

自動化的telnet我做一個gradle產出/ OSGi的構建....使用Groovy

我有OSGi包建設很好,但要自動運行的包部署。我不認爲這是一個重要的任務,所以這成爲一個常規問題。要部署到osgi容器,請執行以下操作:1)telnet到OSGi容器端口2)send ss命令列出軟件包3)解析出問題軟件包4)通過「uninstall [ID]」命令卸載軟件包5)通過「安裝文件:///路徑綁定」url來安裝捆綁包6)解析結果7)退出telnet會話。

有沒有辦法通過Groovy遠程登錄到一個端口併發送命令並讀取輸出?

感謝您的幫助, 菲爾

回答

1

我不知道遠程登錄,但我使用AntBuilder和sshexec任務像這樣使用Groovy和SSH工作:

class SshClient { 

    def host 
    def username 
    def password 


    def execute (def command) { 
     def ant = new AntBuilder() 
     ant.sshexec(host : host, 
        username : username, 
        password : password, 
        command : command, 
        trust : "true", 
        outputproperty : "result") 

     return ant.project.properties."result" 
    } 
} 

def ssh = new SshClient (host: "myhost", 
          username : "myuser", 
          password : "secret") 

println ssh.execute("ls") 

您需要您的classpath中的ant-jsch.jar和jsch-0.1.33.jar或更高版本。

+0

非常有趣。你能通過一個ssh會話執行多個命令嗎? – tinny 2011-05-19 00:09:25

+1

是的,您可以:使用分號分隔命令字符串中的命令,或使用commandResource屬性代替命令屬性,並指向包含必須執行的命令的文件。 – 2011-05-19 08:37:10

0

這應該簡單地用普通套接字和流讀取器/寫入器來完成。 Telnet只是簡單的基於文本協議的套接字I/O的前端。

所以,做你的步驟:

  • 創建一個普通插座到目標主機/端口
  • 寫 「SS」
  • 創建一個InputStreamReader
  • 消耗可用一切
  • 解析找到你的包編號
  • 發送「卸載」+ bundleId
  • 消耗流,直到命令提示到達/卸載完成
  • 發送 「安裝文件://路徑/」
  • 消耗流,直到命令提示到達/安裝完成
  • socket.close()

是的,我知道這與你已經寫過的步驟相似,但由於telnet不是一個真正的協議,而只是一個文本套接字的前端,所以這對你自己來說應該很容易實現。