0

我正在做一个 gradle/OSGi 构建。

我的 OSGi 包构建良好,但想要自动化包部署。我不认为这有一个 gradle 任务,所以这成为一个时髦的问题。要部署到 osgi 容器,请执行以下操作:

  1. telnet 到 OSGi 容器端口
  2. 发送 ss 命令列出捆绑包
  3. 解析出有问题的捆绑包
  4. 通过“卸载 [ID]”命令卸载捆绑包
  5. 通过“安装文件:///路径到包”url安装包
  6. 解析结果
  7. 退出远程登录会话。

有没有办法使用 Groovy 远程登录到端口并发送命令并读取输出?

谢谢你的帮助,菲尔

4

2 回答 2

1

我不了解 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 或更高版本。

于 2010-08-14T19:55:37.280 回答
0

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

所以,做你的步骤:

  • 创建到目标主机/端口的普通套接字
  • 写“ss”
  • 创建一个输入流阅读器
  • 消耗所有可用的东西
  • 解析以找到您的捆绑包 ID
  • 发送“卸载”+ bundleId
  • 使用流直到命令提示符到达/卸载完成
  • 发送“安装文件://路径/”
  • 使用流直到命令提示符到达/安装完成
  • socket.close()

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

于 2010-08-16T08:46:13.930 回答