你好,我正在尝试在GITLAB中使用CI/CD,我是一个漂亮的新手。
我能够创建以下yml文件
# Default image is docker:stable
image: docker:stable
# Define deployment stages
stages:
- build
# We use docker-in-docker (dind) for building docker images (build stage)
services:
- docker:dind
# Build unit test on dotnet core sdk image
build:
stage: build
image: mcr.microsoft.com/dotnet/sdk:5.0
script:
- cd TestRegressionNebra/
- dotnet restore "TestRegressionNebra.csproj"
- dotnet build "TestRegressionNebra.csproj"
- 'dotnet test "TestRegressionNebra.csproj" --test-adapter-path:. --logger:"junit;LogFilePath={assembly}-test-result.xml;MethodFormat=Class;FailureBodyFormat=Verbose"'
artifacts:
when: always
paths:
- ./**/*test-result.xml
reports:
junit:
- ./**/*test-result.xml
tags:
- nebra
但是当我运行这个程序时,它给了我这个错误:
/builds/fm/ecommerce/qa/testregression/TestRegressionNebra/bin/Debug/net4.6.1/TestRegressionNebra. dll的测试运行(.NETFramework,版本=v4.6.1)Microsoft(R)测试执行命令行工具版本16.11.0正在启动测试执行,请稍候...共有1个测试文件与指定的模式匹配。System.IO.FileNotFoundException:未能找到“mono”主机。请确保计算机上已安装“mono”,并且在PATH环境变量中可用。at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Helpers.DotnetHostHelper.GetMonoPath()
当我在我的个人电脑上运行相同的命令时,没有发现任何问题。
编辑:附加了我的 *.csproj文件
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net461</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="JunitXml.TestLogger" Version="3.0.98" />
<PackageReference Include="NUnit" Version="3.12.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.16.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="Selenium.Support" Version="3.141.0" />
<PackageReference Include="Selenium.WebDriver" Version="3.141.0" />
<PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="94.0.4606.6100" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Common\Common.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="System.Configuration.Install" />
</ItemGroup>
3条答案
按热度按时间zrfyljdw1#
根据错误消息(和一些注解),您似乎使用了错误类型的跑步机。
GitLab CI/CD是在GitLab Runner上运行的。如果你想运行任何依赖于Windows或Windows软件包的东西,那么你需要install a GitLab Runner on Windows,或者如果你使用的是GitLab.com,那么你需要use the Windows shared runners。
您在CI yaml中指定的映像
image: mcr.microsoft.com/dotnet/sdk:5.0
也需要安装所有依赖项,或者作为script
部分的一部分安装必要的依赖项。我还建议看一下dotnet CI example和dotnet-core CI example。请参阅CI/CD Examples docs page了解更多信息。
dphi5xsq2#
当我尝试在Docker Linux容器中运行测试时,使用NUnit3Adapter和VisualStudio 2022 TestExplorer时,我遇到了类似的问题。MS测试框架没有问题,但NUnit搜索mono框架,尽管提供了dotnet for Linux。
知道为什么NUnit测试在适配器中查找mono而不是dotnet吗?
我在项目中使用了多个目标框架,通常是.NET 6.0和.NET Framework 4.72,但对于Linux,我只需要.NET 6.0。
图像库为:mcr.microsoft.com/dotnet/sdk:6.0
错误:
[错误]系统.IO.文件未找到异常:未能找到“mono”主机。请确保计算机上已安装“mono”,并且在PATH环境变量中可用。at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Helpers.DotnetHostHelper.GetMonoPath(). Visual Studio.测试平台.跨平台引擎.主机.默认测试主机管理器.获取测试主机进程启动信息(1)可枚举的1个源,标识的2个环境变量,测试运行器连接信息连接信息)在微软.VisualStudio.测试平台.跨平台引擎.客户端.代理操作管理器.安装通道(IEnumerable 1个源,字符串运行设置)在Microsoft.VisualStudio.测试平台.交叉平台引擎.客户端.代理发现管理器.发现测试(发现条件发现条件,ITestDiscoveryEventsHandler2事件处理程序)
pcww981p3#
在跨平台项目中,如果在
Linux
上使用NET 6.0和.NET Framework 4.72,则如果需要在.NET Framework 4.72上进行测试,则必须安装mono
。如果在Linux
上仅使用NET 6.0,则忽略此警告。