У мене є сценарій, який добре працює, коли я сш на сервер, щоб виконати його сам, але є проблеми, коли Хадсон , сервер безперервної інтеграції, запускає його.
Я автоматизую тести на вбудованій системі Linux (ціль). Ціль підключається до сервера A (RHEL 5) через серійний і керується через minicom. Сервер B (FC 12) будує тести, які фактично працюють на цілі, і можуть переходити на сервер А. Сервер C (RH) розміщує Хадсона, з сервером B як раб.
Я написав сценарій запуску (http://linux.die.net/man/1/runscript), щоб виконати все необхідне для фактичної мети; він завантажує зображення, монтує каталог із сервера B і виконує тести. Сценарій bash на сервері B викликає minicom зі сценарієм runcript, а також деякі супутні дії. У мене є сервер bash на сервері B, який використовує
ssh -t -t ServerA bashScript.sh
щоб запустити ці тести на ціль Я перебуваю на сервері C, я можу отримати ті тести, які виконуються ssh'ing на сервері B та виконавши скрипт, що ssh's на сервері A, який виконує minicom з runcript. Вау. Огляд:
Сервер A: Хадсон використовує свій підлеглий механізм для отримання ssh на сервер B.
Сервер B: kickOffTests.sh
має лініюssh -t -t ServerA runTests.sh
Сервер A: runTests.sh
викликає сценарій perl, який викликаєminicom -S my.script ttyE1
Завдання після завантаження: монтує каталог із сервера B, де є тести, і вводить цей каталог. Він викликає ще один скрипт bash, який запускає тести, складені C виконуваними файлами.
Тепер, коли я сам виконую будь-який із цих сценаріїв, вони роблять все, що слід. Однак, коли Хадсон намагається зробити те ж саме, на сесії minicom він скаржиться на рядок у "ще одному скрипті bash", який викликає виконуваний файл C ./executable
, з./executable: cannot execute binary file
У мене ще багато чого, щоб дізнатися про Linux, але я вважаю, що ця проблема є наслідком того, що Хадсон не з'єднався з консоллю. Я не знаю точно, що робить Хадсон, щоб контролювати свого раба. Я спробував використовувати лінію export TERM=console
в конфігурації безпосередньо перед запуском kickOffTests.sh, але проблема залишається.
Хтось може мені пояснити, що відбувається і як я можу це виправити? Я не можу видалити жодного із серверів із цього рівняння. Можливо, можна вийняти мініком з рівняння, але це додасть невідомої кількості часу в цей проект, тому я б більше віддав перевагу рішенню, яке використовує те, що я вже маю.