2010-08-14 41 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不是一个真正的协议,而只是一个文本套接字的前端,所以这对你自己来说应该很容易实现。