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%Ä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.
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.
Setzen Sie das test-runner
auf einen no op-Eintrag / Befehl und führen Sie den Testbefehl
Dann
%Vor% 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.
Die Lösung, die ich am elegantesten finde, ist die Verwendung von depends_on
in Ihrer docker-compose.yml
-Datei.
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.
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.
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
:
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:
Tags und Links docker docker-compose concourse