Запустите дотнет-тест внутри док-контейнера - PullRequest
0 голосов
/ 01 мая 2018

Я хочу запустить команду dotnet test внутри контейнера докера, но я просто не могу понять, куда поместить команду. Проект представляет собой тестовый проект .NET Core 2.1. Причина этого в том, что я хочу запустить сквозные интеграционные тесты, которые требуют, чтобы все мои контейнеры были запущены.

DockerFile:

FROM microsoft/dotnet:2.1-runtime AS base
WORKDIR /app

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY *.sln ./
COPY Sombra.IntegrationTests/Sombra.IntegrationTests.csproj Sombra.IntegrationTests/
COPY . .
WORKDIR /src/Sombra.IntegrationTests
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "test", "Sombra.IntegrationTests.csproj"]

докер-compose.yml

version: '3'

services:
  sombra.integrationtests:
    image: sombra.integrationtests
    build:
      context: .
      dockerfile: Sombra.IntegrationTests/Dockerfile
    depends_on:
      - rabbitmq

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Вы используете runtime образ для запуска теста команды sdk . Ваш final от base и base от runtime .

Я успешно использовал модульные тесты в качестве промежуточного шага при сборке контейнера, но никогда не тестировал интеграцию с docker-compose. Основное отличие состоит в том, что я использовал команду RUN вместо entrypoint/cmd, поэтому тесты уже выполняются при сборке контейнера. Основным преимуществом является то, что при неудачных испытаниях отсутствует окончательное изображение. Но опять же, это были чисто юнит-тесты, а не интеграционные тесты. Хотя я могу представить, что это тоже сработает.

Вот мой полный пример:

FROM microsoft/dotnet:2.0-sdk AS build-env
WORKDIR /app

# copy csproj and restore as distinct layers
COPY test.sln ./test.sln
COPY program/program.csproj ./program/program.csproj
COPY program.tests/program.tests.csproj ./program.tests/program.tests.csproj
RUN dotnet restore

# copy everything else and build
COPY . ./
RUN dotnet test program.tests -c Release
RUN dotnet publish program -c Release -o /app/out

# build runtime image
FROM microsoft/dotnet:2.0-runtime
WORKDIR /app
COPY --from=build-env /app/out ./
ENTRYPOINT ["dotnet", "program.dll"]
0 голосов
/ 18 мая 2018

Вы не предоставляете нам журнал ошибок или что-то в этом роде, но я предполагаю, что вы пытаетесь запустить dotnet test Sombra.IntegrationTests.csproj для образа, на котором не установлен dotnet sdk (только dotnet runtime) ,

dotnet runtime - это версия ядра dotnet, которое не может выполнять команды (например, test и build). Он может выполнять только DLL (отсюда и название «время выполнения»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...