用Groovy实现telnet自动化

用Groovy实现telnet自动化,groovy,osgi,gradle,Groovy,Osgi,Gradle,我正在进行gradle/OSGi构建 我已经很好地构建了OSGi捆绑包,但是我想自动化捆绑包的部署。我不认为这是一个梯度任务,所以这成为一个非常好的问题。要部署到osgi容器,请执行以下操作: telnet到OSGi容器端口 发送ss命令以列出捆绑包 解析出有问题的包 通过“uninstall[ID]”命令卸载捆绑包 通过“安装”按钮安装捆绑包file:///path 捆绑“url” 解析结果 退出telnet会话 有没有一种方法可以使用Groovy远程登录到端口,发送命令并读取输出 谢谢你的帮

我正在进行gradle/OSGi构建

我已经很好地构建了OSGi捆绑包,但是我想自动化捆绑包的部署。我不认为这是一个梯度任务,所以这成为一个非常好的问题。要部署到osgi容器,请执行以下操作:

  • telnet到OSGi容器端口
  • 发送ss命令以列出捆绑包
  • 解析出有问题的包
  • 通过“uninstall[ID]”命令卸载捆绑包
  • 通过“安装”按钮安装捆绑包file:///path 捆绑“url”
  • 解析结果
  • 退出telnet会话
  • 有没有一种方法可以使用Groovy远程登录到端口,发送命令并读取输出

    谢谢你的帮助,
    phil

    我不知道telnet,但我使用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")
    

    您需要在类路径中使用ant-jsch.jar和jsch-0.1.33.jar或更高版本。

    对于普通的套接字和流读取器/写入器,这应该是可行的。Telnet只是基于文本协议的简单套接字i/o的前端

    因此,要执行您的步骤:

    • 创建到目标主机/端口的普通套接字
    • 写“ss”
    • 创建inputstreamreader
    • 消费一切可用的东西
    • 解析以查找包id
    • 发送“卸载”+bundleId
    • 使用流,直到命令提示符到达/卸载完成
    • 发送“安装”file://path/"
    • 使用流,直到命令提示符到达/安装完成
    • socket.close()

    是的,我知道这类似于您已经编写的步骤,但由于telnet不是一个真正的协议,而只是文本套接字的前端,因此这应该很容易为您自己实现。

    非常有趣。可以通过一个ssh会话执行多个命令吗?可以:使用分号分隔命令字符串中的命令,或者使用commandResource属性而不是command属性并指向包含必须执行的命令的文件。