代码之家  ›  专栏  ›  技术社区  ›  Jouan Antoine

MSBuild忽略生成错误

  •  0
  • Jouan Antoine  · 技术社区  · 6 年前

    语境

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

    使用的工具是 遮盖物 开源 .

    当配置为 整合 .

    问题

    当我执行配置时 整合 在里面 可视演播室 如果某些测试出错,则生成失败,一切正常,但使用相同的配置执行时 MSBube ,它不会返回任何错误代码,那么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>
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   David Martin    6 年前

    您应该能够使用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>