针对詹金斯管道工作的Cobertura代码覆盖率报告

时间:2016-04-28 14:56:25

标签: jenkins jenkins-pipeline cobertura

我正在使用jenkins的管道插件,我想为每次运行生成代码覆盖率报告,并将其与管道ui一起显示。是否有一个插件我可以用来做这件事(例如Cobertura但它似乎没有管道支持)?

4 个答案:

答案 0 :(得分:36)

有一种方法可以添加管道步骤来发布您的覆盖率报告,但它不会在BlueOcean界面下显示。它将在正常用户界面中显示正常。

pipeline {
    agent any

    stages {
        ...
    }
    post {
        always {
            junit '**/nosetests.xml'
            step([$class: 'CoberturaPublisher', autoUpdateHealth: false, autoUpdateStability: false, coberturaReportFile: '**/coverage.xml', failUnhealthy: false, failUnstable: false, maxNumberOfBuilds: 0, onlyStable: false, sourceEncoding: 'ASCII', zoomCoverageChart: false])
        }
    }
}

请注意,Cobertura插件的其中一个参数是它将使用的XML(示例中为“** / coverage.xml”)。

如果您使用的是python,则需要使用以下内容:

nosetests --with-coverage --cover-xml --cover-package=pkg1,pkg2 --with-xunit test

答案 1 :(得分:10)

如今,您也可以直接在Jenkinsfile中使用cobertura命令

stage ("Extract test results") {
    cobertura coberturaReportFile: 'path-to/coverage.xml'
}

来源:https://issues.jenkins-ci.org/browse/JENKINS-30700

答案 2 :(得分:1)

hwjp的答案是正确的,但是您可以在命令中添加一些不容易找到的额外参数。

一旦安装了Cobertura插件,就可以在

中找到cobertura步骤选项。
  

工作仪表板页面->管道语法->步骤参考

还有一个摘要生成器,对于开始使用它非常有用

  

工作仪表板页面->管道语法

示例命令:

type GenericArgument<T> = T extends A<infer R> ? R : never;

function test<T>(obj: T): GenericArgument<T>  {
    // do operations
    // return ...;
}

class A<T> {
    something: T;
}

class B extends A<number> {
    field = test<B>(this); // <-- field has a type: number
}

class C extends A<number> {
    field = test(this); // <-- field has a type: GenericArgument<this> 
}

enableNewApi是设置为true的好方法,因为新的API更漂亮:D 如果代码覆盖率太低,设置覆盖率目标将自动使工作失败

答案 3 :(得分:0)

使用指定目录中的command line cobertura-report生成报告,并将结果附加为工件。

cobertura-report   [--datafile   file]    --destination  dir  [--format
       html|xml]  [--encoding encoding]  directory [--basedir dir]