如何在Jenkins上构建和测试ASP.NET Core解决方案

时间:2016-08-26 09:12:32

标签: jenkins asp.net-core asp.net-core-1.0

我想在Jenkins持续集成服务器上构建我们的ASP.NET核心解决方案。

我需要运行的步骤是:

  1. dotnet restore
  2. 构建解决方案:dotnet build或msbuild14?
  3. 运行测试:dotnet test
  4. 测试报道
  5. 有人知道或有脚本来完成第2点到第4点吗?

3 个答案:

答案 0 :(得分:1)

你必须记住的是jenkins从哪个目录执行。 dotnet restore可以在根目录下运行,但dotnet builddotnet 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库,我会让它针对netcoreappnet运行。

在Jenkins,我选择发布Cobertura覆盖率报告**/*Cobertura.coverageresults发布xUnit .Net测试结果**/*.testresults。您需要xUnit PluginCobertura Plugin

该脚本要求您的测试项目与OpenCoverOpenCoverToCoberturaConverter 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模板添加到您的构建中:

Example Jenkins Pipeline|Solid