2013-06-04 23 views
5

mamy skrypt unix, który używa narzędzia oczekiwać na interaktywne wykonanie. Ten skrypt działa dobrze, gdy uruchamiamy z serwera uniksowego.oczekiwać, że narzędzie nie działa podczas wykonywania z jenkins

Jeśli uruchomimy ten skrypt od Jenkins, to nie działa.

Poniżej jest skrypt

var="xxxxx" 
expect -c " 
    spawn sudo cp /abcd/sjws/config/obj.conf /abcd/sjws/config/obj.conf_jenkins 
    expect { 
    "Password:" { send $var\r;interact } 
    } 
    exit 
    " 

Poniżej jest wyjście, gdy prowadzimy od Jenkins

spawn sudo cp /abcd/sjws/config/obj.conf /abcd/sjws/config/obj.conf_jenkins 
Password: 
Password: 
Build step 'Execute shell' marked build as failure 
Finished: FAILURE 
+0

Zastanawiam się, czy problem polega na tym, że powłoka rozwija zmienną $ var w skrypcie expect: spróbuj zmienić 'send $ var \ r' na' send \ "$ var \ r \" ' –

Odpowiedz

0

Wydaje się, że Jenkins nie obsługuje interaktywnego modelu poleceń.

Spróbuj użyć narzędzia sshpass, aby przekazać hasło w sposób nieinteraktywny.

install sshpass

$ sshpass -p "password" {your command} 
1

Proszę używać var ​​= 'xxxxx' zamiast var = "xxxxx". Mam nadzieję, że to pomoże.

7

Ponieważ Jenkins nie uruchamia go z rzeczywistego terminala, interact nie działa, ponieważ nie może tam być żadnej interakcji użytkownika.

Można zastąpić interact z

expect eof 
wait 
+0

Dziękuję! Zaoszczędziłem mnóstwo czasu. –

+0

To działało, gdy jenkins działa w CentOS, ale nie działa w systemie Ubuntu. Kompilacja po prostu zawiesza się, gdy jest w Ubuntu. Czy masz wgląd w to? Proszę dać mi znać .. Dzięki –

+0

Być może proces zrodził się z Ubuntu z jakiegoś powodu? Może wciąż czeka na wejście ze względu na wcześniejsze niepoprawne oczekiwania? –

0

to pytanie jest bardzo podobny do: Jenkins not waiting on call to a bash script with expect; dla osób mających podobny problem, , szczególnie, gdy używasz narzędzia "zmieniania użytkownika", pamiętaj, że Jenkins zamyka połączenie SSH zaraz po zmianie użytkownika. Nie możesz kontynuować wydawania poleceń dla nowego użytkownika. Zaprojektuj swój skrypt w taki sposób, że wysyłanego polecenia bezpośrednio, takie jak:

spawn su - username -c "yoursinglewordcommand" 

a potem reszta skryptu spodziewać jak zwykle (byłem też sukcesy z poleceniem Interact).

Powiązane problemy