Msbuild 忽略构建错误

Msbuild ignoring build errors

上下文

我有一个任务集成测试和代码覆盖,我在我的 jenkins 管道中执行。

使用的工具是dotcoverNunit

当配置为 Integration.

时,Nunit 在集成测试构建期间通过 dotcover 执行

问题

当我在visual studio中执行配置Integration时出现一些错误的测试,然后构建失败,一切都是好的,但是当使用 msbuild 执行相同的配置时,它不会 return 任何错误代码然后 jenkins pipelin 不会失败。

这种情况使我们陷入微妙的境地,因为我们不能再信任我们的构建管道了。

我在网上找了几天的解决方案,我仍然在同一个问题上,这就是为什么我在这里寻求你的帮助。

感谢您的帮助。

文件

詹金斯文件

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.csproj

<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>

您应该能够使用 dotcover 参数 ReturnTargetExitCode 从 nunit 获取 return 代码。

<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>