Как остановить сборку через dockerfile при сбое модульного теста (Dockerfile +. NET Framework + Nunit Test + Docker Window Container - PullRequest
0 голосов
/ 17 июня 2020

Я должен останавливать сборку, когда модульный тест не проходит через docker файл. Я использую. NET Framework (не Dot. Net Core). Мне нужно написать команду либо в сценарии Power Shell, либо в файле Docker (в случае сбоя модульного теста сборка должна быть остановлена ​​перед выполнением следующей строки файла docker.

. NET Framework 4.7.2 Docker Только оконный контейнер Проект модульного теста (Nunit) Asp. Net WebForms (старый) Nunit test runner

Шаги, у меня есть проект для Unit test + WebForm + библиотека классов. Я создал powershell скрипт для запуска проекта модульного теста с помощью Nunit test runner. Я добавил путь к скрипту в docker файле.

Я прикрепил Docker файл и скрипт power-shell.

 Docker file code here
`# escape=`
FROM mcr.microsoft.com/dotnet/framework/sdk:4.8-20200512-windowsservercore-ltsc2019
WORKDIR /src

COPY ./POC.Web/POC.Web.csproj ./POC.Web/
COPY ./POC.Entites/POC.Entites.csproj ./POC.Entites/
COPY ./POC.Business.Layer/POC.Business.Layer.csproj ./POC.Business.Layer/
COPY ./POC.UnitTests/POC.UnitTests.csproj ./POC.UnitTests/
COPY ./POC.UnitTests/packages.config  ./POC.UnitTests/
COPY ./MttcPoc.sln .

RUN nuget restore MttcPoc.sln

COPY . .
RUN msbuild POC.UnitTests/POC.UnitTests.csproj /p:OutputPath=c:/out/tests 

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]

# testResult variable using in shellscript to get the result of unit test
ENV testResult="Passed"

RUN nuget install NUnit.Runners

COPY ./startuptest.ps1 /
RUN /startuptest.ps1
#RUN IF $testResult == "Passed"  EXIT 0 ELSE EXIT -1
RUN if [ "$testResult" = "Passed" ] ; then true ; else false; fi
ENTRYPOINT ["powershell", "/startuptest.ps1"]

#***************************************************** 
#Below line should not execute if unit test fail

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-20200512-windowsservercore-ltsc2019 

ENV APP_ROOT=/inetpub/wwwroot `
    CONNECTIONSTRINGS_CONFIG_MAP="" `
    dockercomposeKey="From Docker file"

WORKDIR ${APP_ROOT}
RUN Import-Module WebAdministration; ` 
    Set-ItemProperty -Path 'IIS:\AppPools\DefaultAppPool' -Name processModel.identityType -Value LocalSystem; ` 
    New-WebApplication -Name 'app' -Site 'Default Web Site' -PhysicalPath $env:APP_ROOT

COPY ./startup.ps1 /
RUN /startup.ps1
#ENTRYPOINT ["powershell", "/startup.ps1"]

COPY --from=build c:/out/_PublishedWebsites/POC.Web ${APP_ROOT}
#************************************************************************`

    Powershell script code here

$ProjectDir = "."
$OutDir = "$ProjectDir\testresults"
$testProjectPath = "c:\out\tests\POC.UnitTests.dll"

# Set nunit path test runner
$nunit_path = "$ProjectDir\NUnit.ConsoleRunner.3.11.1\tools\nunit3-console.exe"

# Run NUnit3 tests
& $nunit_path $testProjectPath --framework=net-4.7.2 --work=$OutDir

[XML]$resultDetails = Get-Content .\$OutDir\TestResult.xml
Write-Output $resultDetails
$string = "test-run"
Write-Output $resultDetails.$string.result
$env:testResult = $resultDetails.$string.result
#Passed
#Failed

#Below line added for if test fail then exit from docker build 
If ($resultDetails.$string.result  -eq 'Passed')  {
    Write-Output "Test passed"
    Write-Output $env:testResult
   return true  
    }else{
        Write-Output "Test failed"
        Write-Output $env:testResult
        return -1
    }
...