2016-12-01 7 views
6

Kiedyś wymieniałem katalog tests w .dockerignore, aby nie został uwzględniony w obrazie, który był używany do uruchamiania usługi internetowej.Jak określić różne pliki .dockerignore dla różnych kompilacji w tym samym projekcie?

Teraz próbuję użyć Dockera do uruchomienia testów jednostkowych iw tym przypadku chcę, aby katalog zawierał tests.

Sprawdziłem docker build -h i nie znalazłem żadnej opcji powiązanej.

Jak mogę to zrobić?

+0

Użyj różnych katalogów bazowych? – Henry

Odpowiedz

6

W tej chwili nie ma sposobu, aby to zrobić. Istnieje długa dyskusja na temat dodawania do Docker flagi --ignore w celu udostępnienia pliku ignorowanego do użycia - patrz here.

opcji, które w tej chwili są w większości brzydkie:

  • podzielić projekt na podkatalogów, które mają swoje własne Dockerfile i .dockerignore, co może nie działać w Twoim przypadku.
  • Utwórz skrypt, który skopiuje odpowiednie pliki do katalogu tymczasowego i uruchom tam kompilację Docker.
0

Inną opcją jest posiadanie dalszego procesu budowy, który obejmuje testy. Sposób, w jaki to robię, jest następujący:

Jeśli testy są jednostkowe testy to tworzę nowy obraz Docker, który pochodzi od głównego obrazu projektu; Po prostu przykleję FROM na górze, a następnie ADD testy, plus wszelkie wymagane narzędzia (w moim przypadku, mocha, chai i tak dalej). Ten nowy "testowy" obraz zawiera teraz zarówno testy, jak i oryginalne testowane źródło. Można go po prostu uruchomić tak, jak jest, lub można go uruchomić w "trybie oglądania" z woluminami zmapowanymi do katalogu źródłowego i testowego na hoście.

Jeśli testy są testy integracyjne --for przykład pierwotny obraz może być serwerem GraphQL - wtedy obraz tworzę jest samowystarczalny, to znaczy, nie pochodzi od obrazu pierwotnego (nadal zawiera testy i narzędzia, oczywiście). Moje testy wykorzystują zmienne środowiskowe, aby poinformować ich, gdzie znaleźć punkt końcowy, który wymaga testowania, i łatwo jest uzyskać kompilację Docker, aby wywołać zarówno kontener przy użyciu obrazu podstawowego, jak i inny kontener za pomocą obrazu testowego integracji i ustawić zmienne środowiskowe, aby zestaw testów wiedział, co przetestować.

0

Dodanie wyczyszczonych testów jako mocowania wolumetrycznego do kontenera może być tutaj opcjonalne. Po zbudowaniu obrazu, jeśli jest uruchomiony do testowania, zamontuj kod źródłowy zawierający testy na oczyszczonym kodzie.

services: 
    tests: 
     image: my-clean-image 
     volumes: 
     - '../app:/opt/app' # Add removed tests 
Powiązane problemy