如何将SonarQube与SAP Hybris集成

时间:2016-08-25 13:45:30

标签: sonarqube hybris

SAP Hybris Suite附带集成的PMD插件,可运行自定义PMD代码规则集。

通过Hybris ANT构建脚本调用PMD插件。

但我想知道是否有办法将Hybris Suite与SonarQube集成

3 个答案:

答案 0 :(得分:4)

根据您的hybris版本,已有一个sonar Ant任务将指标发送给Sonar。

首先到你的平台回家:

cd $HYBRIS_HOME/hybris/bin/platform

然后,正确初始化Ant:

. ./setantenv.sh

执行测试:

ant unittests

将结果发送给Sonar:

ant sonar

可以在config/local.properties文件中的平台内配置Sonar Runner。例如:

sonar.java.source=8
sonar.projectName=Example
sonar.projectKey=example
sonar.exclusions=file:**/gensrc/**, **/ws/axis/*
sonar.login=secret
sonar.password=evenmoresecret
sonar.excludedExtensions=core,testweb,scripting,paymentstandard,mediaweb,maintenanceweb,deliveryzone,commons,processing,impex,validation,catalog,europe1,platformservices,workflow,hac,comments,advancedsavedquery,springintegrationlibs,ldap,hmc,virtualjdbc,cockpit,admincockpit,reportcockpit,platformhmc,productcockpit,customerreview,sapcoretest,sapcoreodata,sapcore,sapcorejco,sapcorejcorec,sapcorebol,advancedexport,backoffice,datahubbackoffice,mcc,wishlist,mediaconversion,solrfacetsearch,solrfacetsearchhmc,voucher,promotions,basecommerce,ticketsystem,cms2,cms2lib,btg,cmscockpit,btgcockpit,b2bcommerce,payment,commerceservices,b2bapprovalprocess,commercewebservicescommons,cscockpit,acceleratorservices,b2bacceleratorservices,acceleratorcms,commercefacades,acceleratorfacades,acceleratorstorefrontcommons,b2bacceleratorfacades,addonsupport,sapcoreaddon,captchaaddon,liveeditaddon,commercesearch,commercesearchhmc,commercesearchbackoffice,datahubadapter,sapcoreconfiguration,sapmodel,sapproductavailability,sapproductavailabilityhmc,b2bsapproductavailability,sappricingbol,sappricinghmc,sappricing,sappricingproductcarouseladdon,b2bsappricing,sapcustomerb2c,sapcustomerb2b,sapmodelhmc,saporderexchange,saporderexchangeb2b,sapcoreconfigurationhmc,sapproducthmc,sapcoreconfigurationbackoffice,multipaymentmode,amazonpay,codpayment,bspay,paypalservice

这也是您可能希望配置需要发送的Sonar实例结果的地方。

答案 1 :(得分:1)

假设这是我们正在谈论的Java代码,您可以轻松地分析"它与SonarQube。至于"整合"它是,如果你的意思是你想运行"自定义PMD代码规则集"通过SonarQube,这应该只是安装SonarQube PMD插件并设置质量配置文件。

答案 2 :(得分:0)

sonar 目标已弃用。相反,您应该使用 sonarcheck 目标。默认情况下,此目标会扫描添加到 localextensions.xml 文件的所有扩展名,但您可以覆盖此列表。可以使用 local.properties 文件或通过系统属性(以 -D 为前缀的参数)传递它们来配置所有参数。

假设您在 bin/modules/custom 目录中有 4 个扩展。它们被命名为 ext1ext2ext3ext4。下面是执行具有测试代码覆盖率的 SonarScanner 分析的步骤。

构建软件

SonarScanner 需要构建项目(需要二进制文件)。

  1. 配置 Ant
    cd ${HYBRIS_HOME}/hybris/bin/platform
    . ./setantenv.sh
    
  2. 创建localextensions.xml
    ant extensionsxml \
          -Dplatform.extensionsgen.filename=${HYBRIS_HOME}/hybris/config/localextensions.xml \
          -Dplatform.extensions=ext1,ext2,ext3,ext4
    
  3. 构建软件
    ant all
    

执行测试 (+JaCoCo)

SAP Hybris 套件提供两个任务来执行测试:

  • alltests - 测试主类路径中的类
  • allwebtests - 在网络上下文中测试类

两者都必须使用附加参数执行才能生成测试代码覆盖率报告。

  1. 下载 JaCoCo 代理
    cd /tmp
    wget https://repo1.maven.org/maven2/org/jacoco/org.jacoco.agent/0.8.6/org.jacoco.agent-0.8.6-runtime.jar -O jacocoAgent.jar
    cd ${HYBRIS_HOME}/hybris/bin/platform
    
  2. 执行alltests
    ant alltests \
          -Dtestclasses.extensions=ext1,ext2,ext3,ext4 \
          -Dtestclasses.reportdir=/tmp/alltests \
          -Dstandalone.javaoptions="-Djava.locale.providers=COMPAT,CLDR -javaagent:/tmp/jacocoAgent.jar=destfile=/tmp/jacocoAlltests.exec"
    
    java.locale.providers 参数需要不破坏在 impex 文件中使用非 ASCII 字符的测试。仅在添加 JaCoCo 代理时才需要。
  3. 执行allwebtests
    ant allwebtests \
          -Dtestclasses.extensions=ext1,ext2,ext3,ext4 \
          -Dtestclasses.reportdir=/tmp/allwebtests \
          -Dstandalone.javaoptions="-Djava.locale.providers=COMPAT,CLDR -javaagent:/tmp/jacocoAgent.jar=destfile=/tmp/jacocoAllwebtests.exec"
    

完成所有测试后,我们必须将 JaCoCo exec 文件转换为 XML 格式。

  1. 下载 JaCoCo cli
    cd /tmp
    wget https://repo1.maven.org/maven2/org/jacoco/org.jacoco.cli/0.8.6/org.jacoco.cli-0.8.6-nodeps.jar -O jacocoCli.jar
    cd ${HYBRIS_HOME}/hybris/bin/platform
    
  2. 创建 XML 报告
    java -jar /tmp/jacocoCli.jar report \
           /tmp/jacocoAlltests.exec \
           /tmp/jacocoAllwebtests.exec \
           --classfiles ${HYBRIS_HOME}/hybris/bin/modules/custom/ext1 \
           --classfiles ${HYBRIS_HOME}/hybris/bin/modules/custom/ext2 \
           --classfiles ${HYBRIS_HOME}/hybris/bin/modules/custom/ext3 \
           --classfiles ${HYBRIS_HOME}/hybris/bin/modules/custom/ext4 \
           --xml /tmp/jacocoTestReport.xml
    

执行声纳扫描仪

有几个参数需要设置:

  • sonar.host.url - SonarQube/SonarCloud 服务器 URL
  • sonar.login - 用于向服务器授权的用户令牌
  • sonar.projectKey - 项目标识符
  • sonar.projectName - 项目显示名称
  • sonar.projectVersion - 项目版本
  • sonar.java.source - 运行软件所需的 Java 版本(仅 2105 之前的版本需要)
  • sonar.extensions - 应分析的扩展(仅 2105 之前的版本需要)
  • sonar.junit.reportPaths - 测试结果的路径
  • sonar.test.exclusions - SonarScanner 应该排除的测试
  • sonar.coverage.jacoco.xmlReportPaths - JaCoCo XML 报告的路径
ant sonarcheck
      -Dsonar.host.url=https://example.org/ \
      -Dsonar.login=1234567890abcdefghijk \
      -Dsonar.projectKey=my.company:custom-extensions \
      -Dsonar.projectName="Custom Extensions" \
      -Dsonar.projectVersion=1.0.0-SNAPSHOT \
      -Dsonar.java.source=11 \
      -Dsonar.extensions=ext1,ext2,ext3,ext4 \
      -Dsonar.junit.reportPaths=/tmp/alltests,/tmp/allwebtests \
      -Dsonar.test.exclusions= \
      -Dsonar.coverage.jacoco.xmlReportPaths=/tmp/jacocoTestReport.xml