/ / Jenkins nie czeka na polecenie Docker, aby zakończyć - jenkins, doker

Jenkins nie czeka, aż komenda Dockera się skończy - Jenkins, doker

Staram się, aby Jenkins uruchomił następujące polecenie w oknie dokowanym na niewolniku Jenkins:

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

Problem polega na tym, że kiedy to uruchomię z wnętrza Jenkins Proces Dockera jest wywoływany, ale Jenkins nie czeka na niego i natychmiast zwraca sukces. Jeśli jednak zastąpię polecenie Docker nieskończoną pętlą, Jenkins będzie czekał, zgodnie z oczekiwaniami.

Kiedy uruchamiam to polecenie bezpośrednio z kompilatora slave, jako użytkownik Jenkinsa, system czeka na zakończenie komendy (co chcę zrobić).

Próbowałem zrobić docker attach, ale to również wraca natychmiast. docker wait spowoduje, że Jenkins będzie na to czekał, ale nie zobaczę żadnego wyjścia.

Być może źle to rozumiem ...

  1. Jak mogę sprawić, by Jenkins poczekał na zakończenie tego polecenia?
  2. Jak mogę uzyskać od Jenkinsa dane wyjściowe polecenia uruchomionego w kontenerze dokowania?
  3. Jak mogę ustawić kod wyjścia polecenia uruchomionego w programie Docker tak, aby Jenkins mógł określić, czy udało się, czy nie?

Odpowiedzi:

8 dla odpowiedzi № 1

Okazuje się, że problemem był -t w linii poleceń. Usuwanie -t spowodował, że Jenkins poczekał na dokera, aby zakończyć to, co robi.

Miałem przeczucie, że tak było, ponieważ ttys mogączasami dziwne, a Jenkins prawdopodobnie używa innego typu tty (lub wcale) niż ja, kiedy uruchamiam to samo polecenie w wierszu poleceń powłoki.

W końcu ta komenda zadziałała:

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