Im Moment generieren unsere Jenkins-Agenten für jedes unserer Rails-Projekte eine docker-compose.yml und führen dann docker-compose up aus. Die Datei docker-compose.yml verfügt über einen Hauptcontainer "Web", in dem sich rbenv und alle anderen Rails-Abhängigkeiten befinden. Es ist mit einem DB-Container verknüpft, der die Test-Postgres-DB enthält.
Das Problem tritt auf, wenn wir die Tests tatsächlich ausführen und Exit-Codes generieren müssen. Unser CI-Server wird nur bereitgestellt, wenn das Testskript Exit 0 zurückgibt, Docker-Compose jedoch immer 0 zurückgibt, selbst wenn einer der Containerbefehle fehlschlägt.
Das andere Problem ist, dass der DB-Container unbegrenzt ausgeführt wird, auch nachdem der Webcontainer die Tests ausgeführt hat, und daher docker-compose up
niemals zurückkehrt.
Gibt es eine Möglichkeit, Docker-Compose für diesen Prozess zu verwenden? Wir müssten in der Lage sein, die Container auszuführen, aber nach Abschluss des Webcontainers beenden und den Exit-Code zurückgeben. Im Moment stecken wir manuell mit Docker fest, um den DB-Container hochzufahren und den Webcontainer mit der Option --link auszuführen.
docker-compose
Dies sollte der richtige Weg sein, wenn Sie 1.12.0 und höher verwenden. Vielleicht ist es auch dein Fall. Ein Beispiel könnte sein :docker-compose up --exit-code-from test-unit
. Beachten Sie, dass es bei mir nicht funktioniert hat, bis ichset -e
am Anfang meines Skripts ein hinzugefügt habe.