Mam skrypt, który działa dobrze, gdy ssh do serwera, aby go wykonać, ale ma problemy, gdy Hudson , serwer ciągłej integracji, uruchamia go.
Automatyzuję testy we wbudowanym systemie Linux (cel). Cel jest połączony z serwerem A (RHEL 5) szeregowo i obsługiwany przez minicom. Serwer B (FC 12) buduje testy, które faktycznie działają na obiekcie docelowym i może ssh do serwera A. Serwer C (RH) hostuje Hudson, z serwerem B jako slave.
Napisałem skrypt runcript (http://linux.die.net/man/1/runscript), aby zrobić wszystko, co potrzebne w rzeczywistym celu; uruchamia obraz, montuje katalog z serwera B i wykonuje testy. Skrypt bash na serwerze B wywołuje minicom wraz ze skryptem runcript wraz z pewnymi akcjami towarzyszącymi. Mam skrypt bash na serwerze B, który używa
ssh -t -t ServerA bashScript.sh
aby testy te zostały uruchomione na obiekcie docelowym. Jestem na serwerze C, mogę uruchomić te testy poprzez ssh'ing na serwerze B i wykonanie skryptu ssh na serwerze A, który wykonuje minicom z runcript. Uff Recenzować:
Serwer A: Hudson używa swojego mechanizmu podrzędnego do ssh na serwerze B.
Serwer B: kickOffTests.sh
ma linięssh -t -t ServerA runTests.sh
Serwer A: runTests.sh
wywołuje skrypt Perla, który się wywołujeminicom -S my.script ttyE1
Cel po uruchomieniu: Montuje katalog z serwera B, na którym znajdują się testy, i wchodzi do tego katalogu. Wywołuje kolejny skrypt bash, który uruchamia testy, które są skompilowanymi plikami wykonywalnymi C.
Teraz, kiedy mam wykonać żadnego z tych scenariuszy się, robią to, co powinny. Jednak gdy Hudson próbuje zrobić to samo, w sesji minicom narzeka na wiersz w „jeszcze innym skrypcie bash”, który wywołuje plik wykonywalny C ./executable
, z./executable: cannot execute binary file
Nadal mam wiele do nauczenia się na temat Linuksa, ale podejrzewam, że ten problem wynika z braku połączenia Hudsona z konsolą. Nie wiem dokładnie, co Hudson robi, aby kontrolować swojego niewolnika. Próbowałem użyć linii export TERM=console
w konfiguracji tuż przed uruchomieniem kickOffTests.sh, ale problem pozostaje.
Czy ktoś może mi wyjaśnić, co się dzieje i jak mogę to naprawić? Nie mogę usunąć żadnego serwera z tego równania. Możliwe, że uda się wyciągnąć minicom z równania, ale dałoby to nieznany czas temu projektowi, więc wolałbym rozwiązanie, które wykorzystuje to, co już mam.