【问题标题】:Jacoco coverage in Jenkins PipelineJenkins Pipeline 中的 Jacoco 覆盖范围
【发布时间】:2023-03-27 02:50:01
【问题描述】:

谁能建议是否有办法在 Jenkins 流水线中执行 Jacoco?我已经下载了插件,但在“管道语法”中没有看到 Jacoco 的选项,这是管道脚本帮助。

引用此网址:https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin 没有关于 jenkins jacoco 管道的信息

【问题讨论】:

  • 如果你的构建工具是Gradle,你可以这样做:sh "./gradlew jacocoTestReport"publishHTML(target: [reportDir:'build/jacocoHtml', reportFiles: 'index.html', reportName: 'Code Coverage'])
  • 不知道为什么这个问题被低估了。想知道什么是更好的提问方式。我知道如何配置 Jacoco Jenkins 插件,但无法获得有关如何在管道中进行配置的任何信息。因此我在这个论坛发帖。非常失望:(
  • JaCoCo 大约是 jacoco.org/jacoco ,所以你可能会投反对票,因为最初根本没有提到 Jenkins JaCoCo 插件( stackoverflow.com/revisions/41893846/1 ),所以问题不清楚。虽然现在提到了,但您仍然可以改进标题和改写正文。

标签: jenkins groovy jenkins-plugins jacoco


【解决方案1】:

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 Pipeline Steps Reference中找到更多选项

【讨论】:

    【解决方案2】:

    在尝试在 Internet 上搜索如何执行此操作的简单示例后,我最终在我们的 Jenkins 实例中找到了“step”工具。

    它知道如何根据你安装的插件和模块生成 Jenkinsfile 管道代码的 sn-ps。

    总而言之,基本条目如下所示:

    stage('Build') {
         steps {
            sh './jenkins_build.sh'
            junit '*/build/test-results/*.xml'
            step( [ $class: 'JacocoPublisher' ] )
         }
    }
    

    jenkins 文档确实需要更新一些单行示例。

    【讨论】:

    • @user5917011 Jacoco 报告图表在工作主页上可用吗?
    • 你忘了告诉在哪里放置 jacoco 命令。是在帖子中,还是在舞台本身内?
    【解决方案3】:

    从 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

    【讨论】:

    • 警告:如果您没有指定类模式或排除模式,那么 Jenkins 会将您的测试类包含在覆盖率报告中,这会完全扭曲数字。对于 gradle 构建,这是我现在使用的:jacoco(execPattern: '**/build/jacoco/**.exec', classPattern: '**/classes/*/main')
    【解决方案4】:

    如果您查看 list of plugins compatible with pipeline,您会发现 Jenkins JaCoCo 插件 was made compatible,但没有任何文档更新,除了 entry in changelog

    2.1.0 版(2016 年 9 月 29 日)

    JENKINS-27120 为 JaCoCo 发布者添加工作流支持

    可能是因为它的用法简单,与许多其他步骤的用法相似:

    step([$class: 'JacocoPublisher', ...])
    

    【讨论】:

      【解决方案5】:

      使用 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'
      )
      

      【讨论】:

        【解决方案6】:

        自已接受的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

        以下用于从Code Coverage API plugin 收集报道的 DSL 对我有用:

        publishCoverage adapters: [jacocoAdapter('build/reports/jacoco/test/jacocoTestReport.xml')]
        

        【讨论】:

          猜你喜欢
          • 2019-12-27
          • 2018-07-27
          • 2017-03-06
          • 1970-01-01
          • 2012-04-14
          • 1970-01-01
          • 2021-07-10
          • 2016-03-21
          相关资源
          最近更新 更多