2014-07-17 15 views
5

Sto cercando di Jenkins per eseguire il seguente comando all'interno di finestra mobile su uno slave Jenkins:Jenkins non è in attesa per il comando Docker per finire

docker run -i -v `pwd`:/opt/myapp -w /opt/myapp -t mydockerimage /bin/bash -c "./setup_dev_env.sh && make all" 

Il guaio è che quando ho eseguito questo dall'interno Jenkins viene generato il processo Docker, ma Jenkins non lo attende e restituisce immediatamente il successo. Se, tuttavia, sostituisco il comando Docker con un ciclo infinito, Jenkins aspetterà, come previsto.

Quando eseguo questo comando dalla schiava costruire direttamente, come l'utente Jenkins, il sistema attende per il comando alla fine (che è quello che voglio che accada).

Ho provato a fare un docker attach, ma che restituisce anche subito. docker wait causerà l'attesa di Jenkins, ma non vedrò nessuna uscita.

Forse ho intenzione di questo tutto sbagliato ...

  1. Come posso ottenere Jenkins di aspettare per questo comando per terminare?
  2. Come posso ottenere Jenkins per visualizzare l'output del comando in esecuzione nel contenitore finestra mobile?
  3. Come posso ottenere il codice di uscita del comando di marcia in Docker per avere caratteristiche tali che Jenkins possa determinare se è riuscita o meno?

risposta

8

Si è verificato il problema è stato il -t nella riga di comando. La rimozione di -t ha impedito a Jenkins di attendere che la finestra mobile finisse cosa stava facendo.

ho avuto la sensazione che questo era il caso perché ttys può essere a volte strano e Jenkins è probabilmente utilizzando un diverso tipo di tty (o per niente) di me quando sono in esecuzione lo stesso comando al prompt della shell.

Alla fine, questo comando ha funzionato:

docker run -i -v `pwd`:/opt/myapp -w /opt/myapp mydockerimage /bin/bash -c "./setup_dev_env.sh && make all" 
+0

Sono felice di accettare una risposta che spiega il motivo per cui questo accade o se c'è un modo migliore per gestire questa situazione. –

+2

the t Alloca una pseudo-tty, questo è diverso con jenkins tty. così jenkins restituirà il successo immediatamente. È tutto – xds2000

Problemi correlati