Jenkins Pipeline中的Jacoco覆盖率

51

有没有人可以建议一种在Jenkins Pipeline中执行Jacoco的方法?我已经下载了插件,但在“Pipeline Syntax”(即Pipeline脚本帮助)中没有找到Jacoco选项。

参考以下网址:https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin 该页面并没有提供关于Jenkins Jacoco Pipeline的信息。


如果您的构建工具是Gradle,您可以像这样操作:`sh "./gradlew jacocoTestReport"` `publishHTML(target: [reportDir:'build/jacocoHtml', reportFiles: 'index.html', reportName: 'Code Coverage'])` - Jacob Aae Mikkelsen
不确定为什么这个问题被低估了。想知道更好的提问方式是什么。我知道如何配置Jacoco Jenkins插件,但是没有找到有关在管道中如何执行此操作的任何信息。因此我在这个论坛上发布了这个问题。非常失望 :( - user5917011
JaCoCo是关于http://www.jacoco.org/jacoco/的,因此您可能会被否决,因为一开始没有提到Jenkins JaCoCo插件(http://stackoverflow.com/revisions/41893846/1),所以问题并不明确。虽然现在已经提到了它,但是您仍然可以改进标题并重新编写正文。 - Godin
请参见:https://dev59.com/l4Dba4cB1Zd3GeqPDmR0#48685604 - theINtoy
6个回答

49

jacoco管道步骤的配置使用这种格式:

step([$class: 'JacocoPublisher', 
      execPattern: 'target/*.exec',
      classPattern: 'target/classes',
      sourcePattern: 'src/main/java',
      exclusionPattern: 'src/test*'
])

或者使用更简单的声明式流水线语法:

jacoco( 
      execPattern: 'target/*.exec',
      classPattern: 'target/classes',
      sourcePattern: 'src/main/java',
      exclusionPattern: 'src/test*'
)

您可以在JaCoCo管道步骤参考文档中找到更多选项。


35

在试图在互联网上寻找关于如何完成这个简单示例的方法时,我最终在我们的Jenkins实例中找到了“step”工具。

它知道如何根据你安装的插件和模块生成Jenkinsfile流水线代码片段。

长话短说,基本条目看起来像:

stage('Build') {
     steps {
        sh './jenkins_build.sh'
        junit '*/build/test-results/*.xml'
        step( [ $class: 'JacocoPublisher' ] )
     }
}
Jenkins文档需要更新,加上一些一行代码示例。 Jenkins 2.32.x的示例

1
@user5917011 Jacoco报告图是否可以在作业主页面上查看? - t_sologub
1
你忘记告诉在哪里放置jacoco命令了。它是在post中还是在stage内部? - C.J.

20

从Jacoco插件2.2.1开始,您现在可以使用jacoco(execPattern: 'target/jacoco.exec')

我个人有几个不同的Jacoco文件用于不同的执行,并希望支持Maven和Gradle(因此使用build/target/目录),所以我使用jacoco(execPattern: '**/*.exec')

参考:https://github.com/jenkinsci/jacoco-plugin/pull/83


4
警告:如果您没有指定类模式或排除模式,则Jenkins将在覆盖率报告中包含您的测试类,这将严重影响统计数字。对于Gradle构建,您可以使用以下配置:jacoco(execPattern: '**/build/jacoco/**.exec', classPattern: '**/classes/*/main') - nerdherd

4

1

因为已经接受的那个来自jacoco DSL的答案对我没有用,所以我希望您能再发表一个回答。

WorkflowScript: 86: Invalid parameter "execPattern", did you mean "path"? @ line 86, column 20.
               jacoco(execPattern: 'build/jacoco/test.exec')

我无法确定我的Jenkins使用哪一套插件,我只知道Jenkins的版本是2.289.1。
以下DSL用于从 Code Coverage API plugin收集覆盖率对我很有帮助:
publishCoverage adapters: [jacocoAdapter('build/reports/jacoco/test/jacocoTestReport.xml')]

1

使用 Jacoco Jenkins 插件的最佳方法是生成可执行文件 (jacoco.exec) 并在流水线中指定该文件的位置。 对于多模块项目,配置会稍有不同,请参考:Jacoco code coverage for multi module maven project

Jenkins 流水线如下:

jacoco(
    execPattern: '**/path_to_file/jacoco.exec',
    classPattern: '**/coverage/**',
    sourcePattern: '**/coverage/**',
    inclusionPattern: '**/*.class'
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接