TeamCity的虚假(F#Make)dotCover报道

TeamCity的虚假(F#Make)dotCover报道,f#,teamcity,f#-fake,dotcover,F#,Teamcity,F# Fake,Dotcover,我有一个伪构建脚本,其中包含使用DotCoverNUnit3扩展的DotCoverCoverCoverage步骤: let filters = "" !! (buildDir @@ "/*.UnitTests.dll") |> DotCoverNUnit3 (fun p -> { p with Output = artifactsDir @@ "NUnitDotCover.snapshot" Filters

我有一个伪构建脚本,其中包含使用DotCoverNUnit3扩展的DotCoverCoverCoverage步骤:

let filters = ""

!! (buildDir @@ "/*.UnitTests.dll")
    |> DotCoverNUnit3 (fun p -> 
        { p with
            Output = artifactsDir @@ "NUnitDotCover.snapshot"
            Filters = filters }) nunitOptions
快照生成正确,但TeamCity构建中未显示覆盖率概述

构建快照后,我尝试调用DotCoverReport:

DotCoverReport (fun p -> 
    { p with 
        Source = artifactsDir @@ "NUnitDotCover.snapshot"
        Output = artifactsDir @@ "NUnitDotCover.xml"
        ReportType = DotCoverReportType.Xml }) true
这将生成预期的XML报告,但同样,覆盖率概述不会显示在构建概述页面中

作为旁注-我不确定DotCoverReport方法末尾的布尔参数是什么,在假文档中找不到对它的引用。我试着换了这个值,但没什么不同

有人知道如何让TeamCity获取DotCover报告吗?

找到了解决方案

在深入研究TeamCity的多层文档后,我发现了以下页面:

它描述了如何使用服务消息将TeamCity指向快照的方向

因此,最终我不需要DotCoverReport,只需要快照:

DotCoverReport (fun p -> 
    { p with 
        Source = artifactsDir @@ "NUnitDotCover.snapshot"
        Output = artifactsDir @@ "NUnitDotCover.xml"
        ReportType = DotCoverReportType.Xml }) true
对于dotCover,您应该向dotCover.exe cover命令生成的快照文件发送路径

这是我的最终目标:

let artifactsDir = environVarOrDefault "ARTIFACT_DIR" (currentDirectory @@ "artifacts")

let nunitOptions nUnit3Defaults =
{ NUnit3Defaults with
    TimeOut = TimeSpan.MaxValue
    WorkingDir  = artifactsDir }

Target "TestCoverage" (fun _ ->
    let filters = ""

    !! (buildDir @@ "/*.UnitTests.dll")
        |> DotCoverNUnit3 (fun p -> 
            { p with
                Output = artifactsDir @@ "NUnitDotCover.snapshot"
                Filters = filters }) nunitOptions

    tracefn "##teamcity[importData type='dotNetCoverage' tool='dotcover' path='%s']" (artifactsDir @@ "NUnitDotCover.snapshot") 
)

从这里,我可以看出,问题的关键是如果任务失败,是否会导致整个构建失败。该参数没有名称,因为
DotCoverReport
返回当前函数。它可能应该显式地接收并传递一个命名参数,而不是用于文档。啊,我明白了,我想,所以bool是
buildParamsAndExecute
failBuild
参数,我试着使用它,但它给出了一个错误,即“nunitOptions未定义”@johnfernandes我认为dan ellis必须在外部范围内声明nunitOptions。如果您没有可设置的选项,您可以将
nunitOptions
替换为
id
@joachim chapman correct,@johnfernandes我已经用定义
nunitOptions
什么是path='%s'的代码更新了我的答案?@KMittal
path='%s'
是提供给
tracefn
的格式字符串的一部分,
%s
被快照文件路径替换,快照文件路径是
tracefn
函数调用的第二个参数。把它想象成一个字符串替换,我们用快照文件的路径替换
%s
tracefn
进行字符串替换,然后将结果字符串写入命令行。