2012-07-26 13 views
8

Piszę kilka skryptów powłoki Linuksa, które przenoszą niektóre kod i byłoby miło i prosto, gdyby mogły być interaktywne.W jaki sposób Jenkins radzi sobie z interaktywnymi skryptami powłoki?

Wadą jest to, że chciałbym wykonać niektóre z tych skryptów w Jenkins i nie jestem całkiem pewien, w jaki sposób Jenkins obsługuje podpowiedzi użytkownika w skrypcie. Nie byłem w stanie znaleźć niczego na ten temat i nie mam środków, aby po prostu go przetestować, więc każda rada byłaby doceniona.

Dzięki chłopaki

+0

Możesz chcieć sprawdzić [spodziewać (1)] (http://linux.die.net/man/1/expect). –

+0

Dzięki. Używam oczekiwać, ale robić to, co chciałbym, wydaje się być kilka dziwnych work-arounds, które wolałbym uniknąć – degausser

+0

Jest to klasyczny problem. Interaktywne rzeczy są miłe, w ograniczonym tego słowa znaczeniu, dla ludzi dzwoniących. Ale materiał wsadowy jest o wiele lepszy dla automatyzacji (wywoływacze skryptów). Proponuję napisać prawie wszystko na użytek partyjny, chyba że pracujesz na edytorze tekstu lub coś takiego, ponieważ w dłuższej perspektywie lepsza kompozycja skryptów wsadowych kończy się wielką wygraną. Nie chodzi tylko o to, że możesz w praktyce tworzyć skrypty wsadowe; znacznie łatwiej jest wykonywać zautomatyzowane testy za pomocą interfejsów wsadowych, dzięki czemu kod staje się bardziej niezawodny. – user1277476

Odpowiedz

7

Jeżeli polecenie, że Jenkins wykonuje oczekuje wejścia, będzie to po prostu siedzieć i czekać na wejście. Zadanie zostanie zawieszone, a będziesz musiał go zabić ręcznie. Jednym ze sposobów radzenia sobie z tym jest podsunięcie oczekiwanego wejścia do polecenia, np.

echo "input" | command 

lub

command < file_with_input 
+0

Dzięki za szybką odpowiedź. W rzeczywistości próbuję zrobić coś takiego jak "echo" Wprowadź hasło: "; czytaj PASSWORD' i poproś użytkownika o podanie hasła w locie. Wygląda na to, że jest to do przyjęcia z tego, co powiedziałeś powyżej (?) – degausser

+1

"Odczyt" zostanie zablokowany do momentu ręcznego zabicia zadania. Biorąc pod uwagę, że przechowujesz wynik w zmiennej środowiskowej, możesz odpowiednio ustawić tę zmienną w zadaniu Jenkins, a w skrypcie wymagać tylko wprowadzenia przez użytkownika, jeśli zmienna nie jest ustawiona. –

+0

Przepraszam, powinienem być bardziej konkretny. Prawdziwym poleceniem jest 'scp', więc dopóki nie użyjesz go, wymusza żądanie. Mówisz, że zachęta "zablokuje". Rozumiem, że zatrzymałoby to proces i czekało na dane wejściowe, ale czy użytkownik byłby w stanie odpowiedzieć na to pytanie w Jenkins? (trochę Jenkinsa nooba, jeśli nie możesz powiedzieć) – degausser

Powiązane problemy