Msbuild игнорирует ошибки сборки - PullRequest
0 голосов
/ 21 ноября 2018

Контекст

У меня есть тестирование интеграции задач и покрытие кода, которое я выполняю в своем конвейере jenkins.

Используемые инструменты: dotcover и Nunit .

Nunit выполняется через многоточие во время построения интеграционного теста, когда конфигурация Интеграция .

Проблема

Когда я выполняю конфигурацию Интеграция в Visual Studio с некоторыми ошибочными тестами, затем сборка завершилась неудачно, все в порядке, но когда такая же конфигурация выполняется с msbuild , это не такверните любой код ошибки, тогда jenkins pipelin не завершится с ошибкой.

Ситуация ставит нас в тонкое положение, потому что мы больше не можем доверять нашему конвейеру сборки.

Я ищу решение в Интернете дляИногда я все еще нахожусь в том же положении, поэтому я прошу вас о помощи здесь.

Спасибо за помощь.

Файлы

jenkinsfile

node('BUILD_PROJECT') {
    stage ('Checkout')
    {
        checkout scm
    }

    stage ('Build')
    {
        bat '"C:/Program Files (x86)/NuGet/nuget.exe" restore -NonInteractive MySolution.sln'
        bat "\"C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/MSBuild/15.0/Bin/MSBuild.exe\" /p:Configuration=Release;AssemblyVersion=0.1.0.${env.BUILD_NUMBER} /maxcpucount:8 MySolution.sln"
    }

    stage ('Integration')
    {
        bat "\"C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/MSBuild/15.0/Bin/MSBuild.exe\" /p:Configuration=Integration /maxcpucount:8 MySolution.sln"
    }

    stage ('Publish Coverage')
    {
         publishHTML target: [
            allowMissing: false,
            alwaysLinkToLastBuild: false,
            keepAll: true,
            reportDir: 'Solution/IntegrationProject/bin/Integration/TestResult',
            reportFiles: 'ProjectCoverageReport.html',
            reportName: 'Project Coverage Report'
          ]
    }

    stage ('Setup')
    {
    bat "\"C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/MSBuild/15.0/Bin/MSBuild.exe\" /p:Configuration=Setup;Platform=x86;AssemblyVersion=0.1.0.${env.BUILD_NUMBER} /maxcpucount:8 MySolution.sln"
    }

    stage ('Archive')
    {
        archiveArtifacts artifacts: 'Solution/SetupProject/bin/x86/Setup/MySetup.exe'
    }
}

В IntegrationProject.csproДж

<Target Name="CoverageReport" AfterTargets="CopySqlFiles" Condition="$(Configuration) == Integration">
    <Exec Command="..\packages\JetBrains.dotCover.CommandLineTools.2018.1.3\tools\dotCover.exe analyse /TargetExecutable=..\packages\NUnit.ConsoleRunner.3.8.0\tools\nunit3-console.exe /ReturnTargetExitCode /TargetArguments=&quot;$(TargetPath)&quot; /Filters=-:nunit.framework;-:IntegrationProjectTest;-:type=MyNamespace.View.*;-:type=*Test /TargetWorkingDir=$(TargetDir) /Output=$(TargetDir)\TestResult\MyCoverageReport.html /ReportType=HTML" />
</Target>

1 Ответ

0 голосов
/ 21 ноября 2018

Вы должны иметь возможность использовать параметр dotcover ReturnTargetExitCode , чтобы получить код возврата от nunit.

<Target Name="CoverageReport" AfterTargets="CopySqlFiles" Condition="$(Configuration) == Integration">
    <Exec Command="..\packages\JetBrains.dotCover.CommandLineTools.2018.1.3\tools\dotCover.exe analyse ^
        /TargetExecutable=..\packages\NUnit.ConsoleRunner.3.8.0\tools\nunit3-console.exe ^
        /ReturnTargetExitCode ^
        /TargetArguments=&quot;$(TargetPath)&quot; ^
        /Filters=-:nunit.framework;-:IntegrationProjectTest;-:type=MyNamespace.View.*;-:type=*Test ^
        /TargetWorkingDir=$(TargetDir) ^
        /Output=$(TargetDir)\TestResult\MyCoverageReport.html ^
        /ReportType=HTML
        /ReturnTargetExitCode">
      <Output TaskParameter="ExitCode" PropertyName="DotCoverExitCode" />
    </Exec>

    <Message Text="Unit Tests Failed!" Condition="$(DotCoverExitCode) != '0'"/>  

</Target>
...