W tej chwili nasi agenci Jenkinsa generują plik docker-compose.yml dla każdego z naszych projektów Rails, a następnie uruchamiają docker-compose. Docker-compose.yml ma główny kontener "sieciowy", który zawiera rbenv i wszystkie inne nasze zależności Railsowe. Jest powiązany z kontenerem DB, który zawiera testową bazę danych Postgres.
Problem pojawia się, gdy musimy faktycznie przeprowadzić testy i wygenerować kody wyjścia. Nasz serwer CI zostanie wdrożony tylko wtedy, gdy skrypt testowy zwróci exit 0, ale docker-compose zawsze zwraca 0, nawet jeśli jedno z poleceń kontenera zawiedzie.
Innym problemem jest to, że kontener bazy danych działa w nieskończoność, nawet po zakończeniu testów w kontenerze internetowym, więc docker-compose up
nigdy nie zwraca.
Czy istnieje sposób, w jaki możemy użyć docker-compose do tego procesu? Musielibyśmy mieć możliwość uruchomienia kontenerów, ale kończą pracę po zakończeniu kontenera internetowego i zwracają jego kod zakończenia. W tej chwili utknęliśmy ręcznie przy użyciu dockera, aby uruchomić kontener DB i uruchomić kontener sieciowy z opcją --link.
docker-compose
1.12.0 i nowszych. Może to też twoja sprawa. Przykładem mogą być:docker-compose up --exit-code-from test-unit
. Zauważ, że to nie zadziałało, dopóki nie dodałemset -e
na początku mojego skryptu.