Beenden Sie das Andocken, wenn der Testcontainer fertig ist

9

Ich führe derzeit einen Docker-Compose-Stack für grundlegende Integrationstests mit einem Winkelmesser-Test-Runner, einem Nodejs-Server, der eine Webseite bedient, und einem Wildfly-Server, der ein Java-Backend bedient.

Der Stapel wird von einem Container dind (docker in docker) in meinem Build-Server (concursor ci) ausgeführt.

Aber es scheint, dass der Container nicht endet, wenn er die Winkelmesser-Tests beendet.

Da die Container für "wildfly" und "nodejs" noch immer ausgeführt werden, endet die Build-Aufgabe nie ...

Wie kann ich das Ergebnis nach Abschluss der Tests erfolgreich oder fehlschlagen lassen?

%Vor%     
David Karlsson 01.12.2016, 10:18
quelle

4 Antworten

5

Ähnlich wie bei rspec q / a müssen Sie die Tests als eigenständige Aufgabe ausführen, die einen Exit-Status meldet zurück zu deinem CI.

Sie könnten den Test-Runner in sein eigenes Yaml trennen oder den Test-Runner auf einen No-Op-Befehl / -Eintrittspunkt setzen.

Trennen Sie den Testläufer

Geben Sie die test-runner -Konfigurierung separat an (Sie müssen möglicherweise ein Upgrade auf Version 2 networks anstatt links zu verwenden, um mehrere Kompositionsdateien zu bearbeiten.

%Vor%

Kein Testlauf

Setzen Sie das test-runner auf einen no op-Eintrag / Befehl und führen Sie den Testbefehl

manuell aus %Vor%

Dann

%Vor%

Rückgabecodes

Wenn Ihr CI das Konzept von "Post-Aufgaben" hat, können Sie möglicherweise die rc -Erfassung überspringen und nur die docker-compose down ausführen, nachdem die Test-Runner-CI-Aufgabe abgeschlossen wurde. Es ist auch möglich, dass Ihr CI die Container für Sie aufräumt.

    
Matt 01.12.2016, 11:12
quelle
8

Die Lösung, die ich am elegantesten finde, ist die Verwendung von depends_on in Ihrer docker-compose.yml -Datei.

%Vor%

Jetzt können Sie docker-compose run --rm test_runner verwenden, das Ihre Abhängigkeiten aufbaut, Ihre Tests durchführt, alles abreißt und den Rückkehrcode propagiert.

%Vor%     
wonton 28.07.2017 02:44
quelle
0

Sie können Bereinigungsaufgaben mit ensure für einen Aufgabenschritt in Concourse durchführen. Ссылка

In Ihrem Fall könnten Sie nach Ihren Winkelmesser-Tests einen ensure -Block hinzufügen und eine Aufgabe ausführen, um das, was früher docker-compose 'd war, abzumelden. Sie können auch einen on-success step Ссылка verwenden, um den Teardown durchzuführen, und den docker-compose 'd Container würden behalten, wenn Ihre Tests fehlschlagen.

    
Topher Bullock 05.12.2016 16:32
quelle
0

Sie können diese docker-compose-Parameter verwenden, um das zu erreichen:

--abort-on-container-exit Beendet alle Container, wenn ein Container vorhanden war                                gestoppt.

--exit-code-from Gibt den Beendigungscode des ausgewählten Dienstes zurück                                Container.

Beispiel: docker-compose.yml :

%Vor%

Der folgende Befehl stellt sicher, dass elasticsearch und service-api nach Abschluss von service-test abstürzen und den Exit-Code aus dem Container service-test zurückgeben:

%Vor%     
spektom 26.03.2018 07:18
quelle