2012-12-26 15 views
8

Mam 13 serwerów Windows z systemem Jenkins Slaves. Z jakiegoś powodu (aktualizacje systemu Windows?), Niewolnicy Jenkins okresowo przestają działać, a usługa Jenkins Slave musi zostać ponownie uruchomiona. Jeśli ręcznie ssh do maszyn (serwer Cygwin ssh działa) I wystarczy wpisać:Automatyzacja SSH dla okien z Ruby

net stop "Jenkins Slave" 
net start "Jenkins Slave" 

a to (prawie) zawsze rozwiązuje problem.

Więc napisałem skrypt w języku Ruby, aby zautomatyzować to.

Oto jest:

#!/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 
} 

Skrypt wykonywany na wszystkich maszynach, widzę wyjścia, że ​​usługa została uruchomiona. Jednak ten nigdy nie działa pod. Kiedy wracam do maszyny, usługa nie została uruchomiona.

Niestety, nie mogę używać Linuksa - nie kontroluję tych maszyn.

Wszelkie pomysły na temat, dlaczego działa ręcznie wykonany SSH, ale skrypt nie działa?

Dzięki Phil

+0

Czy wymagany jest ruby, bo coś w rodzaju skryptu PowerShell prawdopodobnie działałoby lepiej, gdyby zostało zaprojektowane dla tego rodzaju zadania administratora – Egryan

Odpowiedz

2

Próbowałem ją w pry i znalazł dwie kwestie:

  1. HOST jest niezdefiniowany, Należy host jak to jest zmienna są przekazywane do bloku.
  2. SSH.start oczekuje, że parametry będą miały klasę STRING, dodaj więc .to_s zgodnie z poniższym opisem.

Ponadto zamieniłem go na idiomatyczny wzór Ruby z użyciem do...end, gdy blok rozciąga się poza 1 linię.

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 

Testowałem to w Pry i teraz działa. Mam nadzieję, że to pomoże.

+1

LOL! Miałem tę zmienną HOST w moim kodzie i usunięto ją po wklejeniu. Więc to SSHing do jednego serwera w kółko :) –

+1

Założę się, że jeden HOST został bardzo dobrze uruchomiony ponownie :) – ZPH