phi*_*son 8 ruby windows ssh jenkins
我有一台运行Jenkins Slaves的13台Windows服务器.由于某种原因(Windows更新?),Jenkins奴隶定期退出工作,需要重新启动Jenkins Slave服务.如果我手动SSH到机器(cygwin ssh服务器正在运行)我只需键入:
net stop "Jenkins Slave"
net start "Jenkins Slave"
Run Code Online (Sandbox Code Playgroud)
而这(几乎)总能解决问题.
所以我编写了一个Ruby脚本来实现自动化.
这是:
#!/usr/bin/env ruby
require 'rubygems'
require 'net/ssh'
USER = 'Administrator'
PASS = 'PASSWORD'
hosts = [:breckenridge, :carbondale, :crestone, :denali, :gunnison, :sneffels, "mammoth", "whitney", "snowmass", "firestone", "avon", :grizzly, :silverton]
hosts.each {|host|
puts "SSHing #{host} ..."
Net::SSH.start( HOST, USER, :password => PASS ) do |ssh|
puts ssh.exec!('net stop "Jenkins Slave"')
puts ssh.exec!('net start "Jenkins Slave"')
puts "Logging out..."
end
}
Run Code Online (Sandbox Code Playgroud)
脚本在所有机器上执行,我看到服务已经启动的输出.但是,这永远不会奏效.当我回到机器时,服务还没有开始.
可悲的是,我无法使用Linux - 我无法控制这些机器.
有关手动执行SSH工作原理的任何想法,但脚本没有?
谢谢phil
小智 3
我在Pry中尝试了一下,发现了两个问题:
host这样,因为这是传递到块中的变量。STRING类,因此添加.to_s如下所示。另外,我将其切换为惯用的 Ruby 模式,do...end即当块超出 1 行时使用。
hosts.each do |host|
puts "SSHing #{host} ..."
Net::SSH.start( host.to_s, USER, :password => PASS ) do |ssh|
puts ssh.exec!('date')
puts "Logging out..."
end
end
Run Code Online (Sandbox Code Playgroud)
我在 Pry 中对此进行了测试,现在可以正常工作了。我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
1389 次 |
| 最近记录: |