Próbuję użyć Jenkinsa do zbudowania projektu C ++ w kontenerze Docker. Nie mam problemu z budowaniem w Jenkins ani budowaniem w kontenerze poza Jenkins.
Poniżej próbowałem. Dla jasności pomijam mapowanie woluminów.
Przypadek 1
Następujące polecenie z powodzeniem uruchamia kompilację w powłoce.
docker run --rm --interactive=true --tty=true $IMAGE make
Jednak po uruchomieniu w Jenkinsie jako „wykonanie powłoki” krok Docker zwraca następujący błąd.
cannot enable tty mode on non tty input
Przypadek 2
Poniższe polecenie jest podobne do poprzedniego, ale wyłącza interaktywność.
docker run --rm $IMAGE make
Jenkins może pomyślnie uruchomić kompilację. Istnieją jednak poważne problemy podczas przerywania kompilacji. Kompilacja jest natychmiast oznaczana jako przerwana, ale kontener działa, dopóki kompilacja nie zostanie ukończona. Również pojemnik nie jest usuwany po wyjściu.
Po uruchomieniu w powłoce polecenie buduje się pomyślnie, ale nie można go przerwać. Również pojemnik jest wyjmowany po wyjściu.
Pytanie
Czy ktokolwiek wiedziałby, jak czysto uruchamiać kompilacje w kontenerach Docker od Jenkinsa i zachować możliwość przerywania kompilacji?
Użycie żadnej wtyczki Jenkins nie jest opcją, ponieważ wywołania Docker znajdują się w skryptach i nie można ich łatwo wyodrębnić.