Ich versuche, Jenkins zu verwenden, um ein C ++ - Projekt in einem Docker-Container zu erstellen. Ich habe kein Problem damit, in Jenkins oder in einem Container außerhalb von Jenkins zu bauen.
Unten ist, was ich versucht habe. Ich verzichte aus Gründen der Übersichtlichkeit auf die Zuordnung der Volumes.
Fall 1
Mit dem folgenden Befehl wird ein Build in einer Shell erfolgreich ausgeführt.
docker run --rm --interactive=true --tty=true $IMAGE make
Wenn Docker jedoch in Jenkins als "Shell ausführen" -Schritt ausgeführt wird, wird der folgende Fehler zurückgegeben.
cannot enable tty mode on non tty input
Fall 2
Der folgende Befehl ähnelt dem vorherigen, deaktiviert jedoch die Interaktivität.
docker run --rm $IMAGE make
Jenkins können einen Build erfolgreich ausführen. Beim Abbrechen eines Builds treten jedoch schwerwiegende Probleme auf. Der Build wird sofort als abgebrochen markiert, der Container wird jedoch so lange ausgeführt, bis der Build abgeschlossen ist. Auch der Behälter wird nach dem Verlassen nicht entfernt.
Wenn der Befehl in einer Shell ausgeführt wird, wird er erfolgreich erstellt, kann jedoch nicht unterbrochen werden. Auch der Container wird nach dem Verlassen entfernt.
Frage
Würde jemand wissen, wie man Builds in Docker-Containern von Jenkins sauber ausführt und die Fähigkeit behält, Builds abzubrechen?
Die Verwendung eines der Jenkins-Plugins ist keine Option, da sich die Docker-Aufrufe in Skripten befinden und nicht einfach extrahiert werden können.