用Groovy实现telnet自动化
我正在进行gradle/OSGi构建 我已经很好地构建了OSGi捆绑包,但是我想自动化捆绑包的部署。我不认为这是一个梯度任务,所以这成为一个非常好的问题。要部署到osgi容器,请执行以下操作:用Groovy实现telnet自动化,groovy,osgi,gradle,Groovy,Osgi,Gradle,我正在进行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属性并指向包含必须执行的命令的文件。