Ho uno script che funziona bene quando eseguo ssh sul server per eseguirlo da solo, ma ha problemi quando Hudson , un server di integrazione continua, lo esegue.
Sto automatizzando i test su un sistema Linux incorporato (l'obiettivo). Il target è collegato al Server A (RHEL 5) via seriale e gestito su minicom. Il server B (FC 12) costruisce i test effettivamente eseguiti sulla destinazione e può collegarsi al server A. Il server C (RH) ospita Hudson, con il server B come slave.
Ho scritto uno script runscript (http://linux.die.net/man/1/runscript) per fare tutto il necessario sul target effettivo; avvia l'immagine, monta una directory dal server B ed esegue i test. Uno script bash sul Server B invoca minicom con lo script runscript insieme ad alcune azioni associate. Ho uno script bash sul Server B che utilizza
ssh -t -t ServerA bashScript.sh
per eseguire quei test sul target. Sono sul Server C, posso far eseguire quei test eseguendo ssh'ing sul Server B ed eseguendo lo script che ssh è sul Server A che esegue minicom con runscript. Accidenti. Revisionare:
Server A: Hudson usa il suo meccanismo slave per inviare al server B.
Server B: kickOffTests.sh
ha la lineassh -t -t ServerA runTests.sh
Server A: runTests.sh
chiama uno script perl che invocaminicom -S my.script ttyE1
Destinazione, dopo l'avvio: monta una directory dal server B, dove si trovano i test, ed entra in quella directory. Invoca ancora un altro script bash, che esegue i test, che sono compilati in C eseguibili.
Ora, quando ho eseguire qualsiasi di questi script me stesso, fanno quello che dovrebbero. Tuttavia, quando Hudson tenta di fare la stessa cosa, nella sessione di minicom si lamenta di una riga nello "ennesimo script bash" che invoca l'eseguibile C ./executable
, con./executable: cannot execute binary file
Ho ancora molto da imparare su Linux, ma suppongo che questo problema sia dovuto al fatto che Hudson non si collega a una console. Non so esattamente cosa fa Hudson per controllare il suo schiavo. Ho provato a usare la linea export TERM=console
nella configurazione poco prima di eseguire kickOffTests.sh, ma il problema persiste.
Qualcuno può spiegarmi cosa sta succedendo e come posso risolverlo? Non riesco a rimuovere nessuno dei server da questa equazione. Potrebbe essere possibile eliminare minicom dall'equazione, ma ciò aggiungerebbe un periodo di tempo sconosciuto a questo progetto, quindi preferirei di gran lunga una soluzione che utilizza ciò che già ho.