Информация об изменениях

Сообщение Re: Юнит-тесты в докере, как лучше? от 21.04.2021 19:19

Изменено 21.04.2021 19:19 VladCore

Re: Юнит-тесты в докере, как лучше?
Здравствуйте, Sharov, Вы писали:

S>Допустим имеется сл. Dockerfile :

S>
  стандартный набор
S>

S>FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
S>WORKDIR /

S>COPY NuGet.Config /root/.nuget/NuGet/NuGet.Config



S>WORKDIR /src

S>COPY ["src/prj/prj.csproj", "src/prj/"]
S>COPY ["src/test/test.csproj", "src/test/"]
S>RUN dotnet restore "src/prj/prj.csproj"
S>COPY . .
S>WORKDIR "/src/src/prj"

S>#где-то тут нужно копировать файлы для тестов и запускать эти тесты


S>RUN dotnet build "prj.csproj" -c Release -o /app/build

S>FROM build AS publish
S>RUN dotnet publish "prj.csproj" -c single_exe -o /app/publish

S>FROM base AS final
S>WORKDIR /app
S>COPY --from=publish /app/publish .
S>ENTRYPOINT ["dotnet", "prj.dll"]
S>



S>Необходимо в докере скопировать файлы для тестов, как-то получить результат выполнения тестов (успех или нет).

S>1) как это сделать -- запуск тестов и получение результатов теста;
S>2) самое главное, как быть с тестовыми файлами, которые для образа не нежны и весят почти ~200Мб?

S>Для пункта 2) пока видятся две опции -- на этапе сборки в TC создать отдельный контейнер для тестов,

S>т.е. просто создать образ, прогнать тесты, если все успешно продолжаем дальше и создаем уже другой,
S>рабочий образ. Минус видится -- все это долго, да и не нужный образ создается. Второй вариант --
S>все делать в одном контейнере, по результатам теста давать какой-то отчет,
S>далее все ненужные файлы удаляются и остаются только библиотеки и/или один исполняемый файл.

ну для такого докер не нужен. если ты конечно не библитеку пишеш для NET Framework и NET Core. и nuget.config как web.config "уточняется" в каждой подпапке.

А тесты с базами редисами и кучей своих прочих сервисов как системы целиком делаются опцией --exit-code-from имя_котнейнера_с_тестами
docker-compose up --exit-code-from tests

тут tests — это контейнер с единственной командой dotnet test
Re: Юнит-тесты в докере, как лучше?
Здравствуйте, Sharov, Вы писали:

S>Допустим имеется сл. Dockerfile :

S>
  стандартный набор
S>

S>FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
S>WORKDIR /

S>COPY NuGet.Config /root/.nuget/NuGet/NuGet.Config



S>WORKDIR /src

S>COPY ["src/prj/prj.csproj", "src/prj/"]
S>COPY ["src/test/test.csproj", "src/test/"]
S>RUN dotnet restore "src/prj/prj.csproj"
S>COPY . .
S>WORKDIR "/src/src/prj"

S>#где-то тут нужно копировать файлы для тестов и запускать эти тесты


S>RUN dotnet build "prj.csproj" -c Release -o /app/build

S>FROM build AS publish
S>RUN dotnet publish "prj.csproj" -c single_exe -o /app/publish

S>FROM base AS final
S>WORKDIR /app
S>COPY --from=publish /app/publish .
S>ENTRYPOINT ["dotnet", "prj.dll"]
S>



S>Необходимо в докере скопировать файлы для тестов, как-то получить результат выполнения тестов (успех или нет).

S>1) как это сделать -- запуск тестов и получение результатов теста;
S>2) самое главное, как быть с тестовыми файлами, которые для образа не нежны и весят почти ~200Мб?

S>Для пункта 2) пока видятся две опции -- на этапе сборки в TC создать отдельный контейнер для тестов,

S>т.е. просто создать образ, прогнать тесты, если все успешно продолжаем дальше и создаем уже другой,
S>рабочий образ. Минус видится -- все это долго, да и не нужный образ создается. Второй вариант --
S>все делать в одном контейнере, по результатам теста давать какой-то отчет,
S>далее все ненужные файлы удаляются и остаются только библиотеки и/или один исполняемый файл.

ну для такого докер не нужен. если ты конечно не библитеку пишеш для NET Framework и NET Core. и nuget.config как web.config "уточняется" в каждой подпапке.

А тесты с базами редисами и кучей своих прочих сервисов как системы целиком делаются опцией --exit-code-from имя_котнейнера_с_тестами
docker-compose up --exit-code-from tests

тут tests — это контейнер с единственной командой dotnet test