我有一个运行Jenkins从站的13个窗口服务器。 出于某种原因(Windows更新?),jenkins奴隶定期退出工作,jenkins奴隶服务需要重新启动。 如果我手动SSH到机器(cygwin SSH服务器正在运行),我只需input:
net stop "Jenkins Slave" net start "Jenkins Slave"
这(几乎)总是解决问题。
所以我写了一个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 }
该脚本在所有机器上执行,我看到服务已经开始输出。 但是,这从来没有工作。 当我退回到机器,服务尚未开始。
可悲的是,我不能使用Linux – 我不能控制这些机器。
任何想法为什么手动执行的SSH工作,但脚本不?
谢谢菲尔
我在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
我在Pry中测试了它,现在它正在工作。 我希望这有帮助。