我想将构建阶段的工件用于测试阶段。但不知何故,
dotnet test
命令找不到任何测试并立即退出。
dotnet restore
和 dotnet build
命令的工作方式似乎有所不同,具体取决于是在本地执行还是在 CI 中执行。
我的
.gitlab-ci
:
image: mcr.microsoft.com/dotnet/sdk:7.0
variables:
CONFIGURATION: 'Release'
MSBUILDDISABLENODEREUSE: "1"
TEST_RESULT_DIRECTORY: '.test-results'
default:
tags:
- .NET 6.0
- WPF
stages:
- Build
- Test
Build:
stage: Build
script:
- dotnet restore --no-cache
- dotnet build --no-restore --configuration $CONFIGURATION
artifacts:
paths:
- ./**/bin/Release
- ./**/obj/Release
expire_in: 1 day
Test:
stage: Test
needs:
- job: Build
artifacts: true
script:
- dotnet test --no-build --nologo --configuration $CONFIGURATION --test-adapter-path:. --logger:"junit;LogFilePath=../$TEST_RESULT_DIRECTORY/{assembly}.xml;MethodFormat=Class;FailureBodyFormat=Verbose"
artifacts:
when: always
reports:
junit:
- ./$TEST_RESULT_DIRECTORY/*.xml
也许我只是在工件中丢失了一个关键文件,但通过比较本地和 CI 生成的文件,我注意到本地生成上的其他 NuGet 相关文件存在差异。
经过一番挖掘,我发现并非所有
dotnet test
所需的文件都放在obj/Release
文件夹中。其中一些比上面一级。
解决方案是包含完整的
obj
目录。
artifacts:
paths:
- ./**/bin/Release
- ./**/obj
对我来说,在构建工作中我正在做
dotnet restore --no-cache --force --packages ".nuget"
我必须将
.nuget
文件夹添加到工件中
artifacts:
paths:
# Save the build outputs as artifacts
- ./**/bin
- ./**/obj
- ./.nuget
expire_in: 1 day
否则我会遇到诸如
之类的问题Data collection : Unable to find a datacollector with friendly name 'XPlat Code Coverage'.
Data collection : Could not find data collector 'XPlat Code Coverage'