我想在Jenkins持续集成服务器上构建我们的ASP.NET核心解决方案。
我需要运行的步骤是:
有人知道或有脚本来完成第2点到第4点吗?
答案 0 :(得分:1)
你必须记住的是jenkins从哪个目录执行。 dotnet restore
可以在根目录下运行,但dotnet build
和dotnet test
需要从与project.json
相同的目录运行。
测试覆盖率是一个单独的主题 - 截至目前(2009年2月1日)在Visual Studio Enterprise 2015中,代码覆盖率不起作用,至少使用XUnit,也许它与MSTest一样。 dotCover现在正在运行,但我不知道如何编写脚本并获得结果。
答案 1 :(得分:1)
第一个构建操作应该是执行dotnet restore
。然后通过常规Windows批处理命令执行PowerShell脚本:
powershell.exe -NoProfile -ExecutionPolicy Bypass ./TestsAndCoverage.ps1
我在Windows上的Jenkins中使用以下脚本进行单元测试和代码覆盖:
$testProjects = "Dangl.Calculator.Tests"
$testFrameworks = "net461", "net46", "netcoreapp1.0", "netcoreapp1.1"
# Get the most recent OpenCover NuGet package from the dotnet nuget packages
$nugetOpenCoverPackage = Join-Path -Path $env:USERPROFILE -ChildPath "\.nuget\packages\OpenCover"
$latestOpenCover = Join-Path -Path ((Get-ChildItem -Path $nugetOpenCoverPackage | Sort-Object Fullname -Descending)[0].FullName) -ChildPath "tools\OpenCover.Console.exe"
# Get the most recent OpenCoverToCoberturaConverter from the dotnet nuget packages
$nugetCoberturaConverterPackage = Join-Path -Path $env:USERPROFILE -ChildPath "\.nuget\packages\OpenCoverToCoberturaConverter"
$latestCoberturaConverter = Join-Path -Path (Get-ChildItem -Path $nugetCoberturaConverterPackage | Sort-Object Fullname -Descending)[0].FullName -ChildPath "tools\OpenCoverToCoberturaConverter.exe"
$testRuns = 1;
foreach ($testProject in $testProjects){
foreach ($testFramework in $testFrameworks) {
# Arguments for running dotnet
$dotnetArguments = "test", "-f $testFramework", "`"`"$PSScriptRoot\test\$testProject`"`"", "-xml result_$testRuns.testresults"
"Running tests with OpenCover"
& $latestOpenCover `
-register:user `
-target:dotnet.exe `
"-targetargs:$dotnetArguments" `
-returntargetcode `
-output:"$PSScriptRoot\OpenCover.coverageresults" `
-mergeoutput `
-excludebyattribute:System.CodeDom.Compiler.GeneratedCodeAttribute `
"-filter:+[Dangl.Calculator*]* -[*.Tests]* -[*.Tests.*]*"
$testRuns++
}
}
"Converting coverage reports to Cobertura format"
& $latestCoberturaConverter `
-input:"$PSScriptRoot\OpenCover.coverageresults" `
-output:"$PSScriptRoot\Cobertura.coverageresults" `
"-sources:$PSScriptRoot"
简短摘要:$testProjects
变量定义(在这种情况下为一个)要运行的测试项目,它们被假定为相对于脚本位于./test
文件夹中。它为所有指定的$testFrameworks
生成测试结果(即,如果我正在测试netstandard1.3
库,我会让它针对netcoreapp
和net
运行。
在Jenkins,我选择发布Cobertura覆盖率报告与**/*Cobertura.coverageresults
和发布xUnit .Net测试结果与**/*.testresults
。您需要xUnit Plugin和Cobertura Plugin。
该脚本要求您的测试项目与OpenCover
和OpenCoverToCoberturaConverter
NuGet包具有(构建时)依赖关系,以生成测试结果并将其转换为Cobertura格式。
这适用于Visual Studio 2015s project.json格式
如果您已经切换到 Visual Studio 2017 ,则需要更改测试命令:运行dotnet xunit
而不是dotnet test
。在csproj
文件中包含这样的dotnet xunit runner:
<PackageReference Include="xunit" Version="2.3.0-beta2-build3683" />
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.0-beta2-build3683" />
还要检查您的构建是否配置为输出调试符号:
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<DebugType>full</DebugType>
<DebugSymbols>True</DebugSymbols>
</PropertyGroup>
The project is on GitHub if you want to take a further look
到目前为止,这只适用于Windows。在Linux上,除代码覆盖之外的所有内容都在工作。
答案 2 :(得分:0)
您可以使用以下管道代码来运行和发布dotnet核心测试结果:
node {
stage 'Checkout'
cleanWs()
checkout scm
stage 'Build'
bat "\"C:/Program Files/dotnet/dotnet.exe\" restore \"${workspace}/YourProject.sln\""
bat "\"C:/Program Files/dotnet/dotnet.exe\" build \"${workspace}/YourProject.sln\""
stage 'UnitTests'
bat returnStatus: true, script: "\"C:/Program Files/dotnet/dotnet.exe\" test \"${workspace}/YourProject.sln\" --logger \"trx;LogFileName=unit_tests.xml\" --no-build"
step([$class: 'MSTestPublisher', testResultsFile:"**/unit_tests.xml", failOnError: true, keepLongStdio: true])
}
我已将我制作的一些示例上传到GitHub,供所有人使用和贡献,请随时查看:
https://github.com/avrum/JenkinsFileFor.NETCore
这些pipline jenkinsfile会将此pipline模板添加到您的构建中: