Azure DevOps中.NET项目测试任务配置失败求助
Azure DevOps构建任务忽略测试失败继续执行的配置问题
问题描述
尝试在Azure DevOps中配置构建任务,让流水线忽略不稳定测试的失败,继续执行后续任务,但测试环节始终失败。使用dotnet test脚本和PublishTestResults@2任务后,收到错误提示:##[error]Bash exited with code '1'。
当前流水线配置YAML如下:
parameters: - name: solution type: string - name: buildPlatform type: string - name: buildConfiguration type: string steps: - task: UseDotNet@2 inputs: version: '5.0.x' packageType: 'sdk' - task: DotNetCoreCLI@2 displayName: 'dotnet restore' inputs: command: restore projects: ${{ parameters.solution }} feedsToUse: select - task: DotNetCoreCLI@2 displayName: 'dotnet build' inputs: command: build includeNuGetOrg: true projects: ${{ parameters.solution }} arguments: '--configuration ${{ parameters.buildConfiguration }}' - script: dotnet test ${{ parameters.solution }} --logger trx - task: PublishTestResults@2 condition: succeededOrFailed() inputs: testRunner: VSTest testResultsFiles: '**/*.trx' - task: CopyFiles@2 displayName: 'copy build' inputs: sourceFolder: '$(Build.SourcesDirectory)' Contents: | **/* !.git/**/* targetFolder: '$(Build.ArtifactStagingDirectory)' - task: PublishBuildArtifacts@1 displayName: 'publish artifact' inputs: pathToPublish: '$(Build.ArtifactStagingDirectory)' artifactName: drop - task: ArchiveFiles@2 displayName: 'zip nuget packages' inputs: rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/_nupkgs' includeRootFolder: false archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/NugetPackages.zip' replaceExistingArchive: true - task: PublishBuildArtifacts@1 displayName: 'publish nuget packages' inputs: pathToPublish: '$(Build.ArtifactStagingDirectory)/NugetPackages.zip' artifactName: nugetPackages
解决方案
问题核心是dotnet test执行失败时会返回非0退出码,导致步骤失败并终止流水线。要实现忽略测试失败继续执行,需做两处调整:
修改
dotnet test脚本,添加参数并允许步骤失败
将原script步骤替换为:- script: dotnet test ${{ parameters.solution }} --logger trx --no-build --fail-fast false continueOnError: true--no-build:跳过测试项目构建(前面已执行dotnet build,避免重复操作)--fail-fast false:即使有测试失败,仍运行全部测试用例continueOnError: true:告知流水线即使该步骤失败,也继续执行后续任务
保留
PublishTestResults@2的条件配置condition: succeededOrFailed()确保无论测试步骤成功与否,都会发布测试结果,方便查看失败测试详情。
修改后的完整测试相关步骤如下:
- script: dotnet test ${{ parameters.solution }} --logger trx --no-build --fail-fast false continueOnError: true - task: PublishTestResults@2 condition: succeededOrFailed() inputs: testRunner: VSTest testResultsFiles: '**/*.trx'
配置完成后,即使存在测试失败,流水线仍会继续执行后续的文件复制、工件发布等任务,同时测试结果会正常上传展示。
内容的提问来源于stack exchange,提问作者someone
相关产品推荐
相关产品推荐

