/ / Jenkins non sta aspettando il completamento del comando Docker - jenkins, docker

Jenkins non sta aspettando il completamento del comando Docker: jenkins, docker

Sto cercando di convincere Jenkins a eseguire il seguente comando nella finestra mobile su uno schiavo Jenkins:

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

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

Quando eseguo direttamente questo comando dallo slave di build, come utente di Jenkins, il sistema attende che il comando finisca (che è ciò che voglio succedere).

Ho provato a fare un docker attach, ma anche questo ritorna immediatamente. docker wait farà sì che Jenkins lo aspetti, ma non vedrò nessuna uscita.

Forse sto andando tutto sbagliato ...

  1. Come posso convincere Jenkins ad aspettare che questo comando finisca?
  2. Come posso far visualizzare a Jenkins l'output del comando in esecuzione nel contenitore docker?
  3. Come posso ottenere che il codice di uscita del comando eseguito in Docker sia impostato in modo tale che Jenkins possa determinare se è riuscito o meno?

risposte:

8 per risposta № 1

Risulta che il problema era il -t nella riga di comando. Rimozione -t indusse Jenkins ad aspettare che la finestra mobile finisse cosa stava facendo.

Ho avuto la sensazione che questo fosse il caso perché i tty possono farloa volte è strano e Jenkins probabilmente usa un diverso tipo di tty (o non lo è affatto) di quello che sono quando eseguo 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"