SonarQube-[代码覆盖率统计|多分支代码扫描|扫描结果关联commitid|控制代码扫描步骤]

root
233
文章
0
评论
2021年10月19日16:11:36 评论 7368字阅读24分33秒

SonarQube-代码覆盖率统计|多分支代码扫描|扫描结果关联commitid|控制代码扫描步骤]

SonarQube-代码覆盖率统计

要想实现Sonarqube的代码覆盖率统计,找一个具有大量单元测试的项目, 然后集成jacoco插件,生成覆盖率报告,最后由sonar收集。

Maven集成Jacoco

pom.xml里添加jacoco-maven-pluginjunit插件。

  • jacoco-maven-plugin
  • junit
<dependencies>
    <dependency>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

添加插件--加到对应标签里就可以

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<version>3.6.1</version>
	<configuration>
    	<skipMain>true</skipMain>
		<skip>true</skip>
		<source>1.8</source>
		<target>1.8</target>
	</configuration>
</plugin>


<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>0.7.5.201505241946</version>
  <executions>
    <execution>
      <id>prepare-agent</id>
      <goals>
        <goal>prepare-agent</goal>
      </goals>
    </execution>
    <execution>
      <id>report</id>
      <phase>prepare-package</phase>
      <goals>
        <goal>report</goal>
      </goals>
    </execution>
    <execution>
      <id>post-unit-test</id>
      <phase>test</phase>
      <goals>
        <goal>report</goal>
      </goals>
      <configuration>
        <dataFile>target/jacoco.exec</dataFile>
        <outputDirectory>target/jacoco-reports</outputDirectory>
      </configuration>
    </execution>
  </executions>
  <configuration>
    <systemPropertyVariables>
      <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
    </systemPropertyVariables>
  </configuration>
</plugin>

SonarQube安装Jacoco插件(8.9.0 版本可以跳过,已经集成

https://github.com/SonarSource/sonar-jacoco/releases/download/1.1.0.898/sonar-jacoco-plugin-1.1.0.898.jar

代码扫描命令里加入
# 指定代码覆盖率工具为jacoco
sonar.core.codeCoveragePlugin=jacoco
# 指定exec二进制文件存放路径
sonar.jacoco.reportPaths=target/jacoco.exec

加入

        sh """
            sonar-scanner -Dsonar.host.url=http://192.168.1.110:9000 \
                -Dsonar.projectKey=${projectName} \
                -Dsonar.projectName=${projectName} \
                -Dsonar.projectVersion=${BUILD_ID} \
                -Dsonar.login=${AUTH_TOKEN} \
                -Dsonar.ws.timeout=30 \
                -Dsonar.projectDescription="my first project!" \
                -Dsonar.links.homepage=http://192.168.1.110/${groupName}/${projectName} \
                -Dsonar.links.ci=http://192.168.1.110:8080/job/${groupName}/job/${projectName}/ \
                -Dsonar.sources=./demo/src \
                -Dsonar.sourceEncoding=UTF-8 \
                -Dsonar.java.binaries=./demo/target/classes \
                -Dsonar.java.test.binaries=./demo/target/test-classes \
                -Dsonar.core.codeCoveragePlugin=jacoco \
                -Dsonar.jacoco.reportPaths=./demo/target/jacoco.exec
                -Dsonar.java.surefire.report=./demo/target/surefire-reports
        """

 

SonarQube-多分支代码扫描

手动安装插件

[root@jeekins plugins]# pwd
/data/sonarqube8.9.0/sonarqube_extensions/plugins

https://github.com/mc1arke/sonarqube-community-branch-plugin/releases

[root@jeekins plugins]# chmod 700 sonarqube-community-branch-plugin-1.8.1.jar 
[root@jeekins plugins]# chown sonar.sonar sonarqube-community-branch-plugin-1.8.1.jar 
[root@jeekins plugins]# ll
总用量 11828
-rwx------ 1 sonar sonar    61903 10月 12 15:58 sonar-l10n-zh-plugin-8.9.jar
-rwx------ 1 sonar sonar 12045563 10月 18 17:35 sonarqube-community-branch-plugin-1.8.1.jar

 

Sonar 8.9.1 版本

新版本插件的配置有变化,效果和使用方式不变。

  1. 将插件下载到extensions/plugins/目录。
  2. 更新sonar服务端的配置文件。
  1. 重启docker restart sonarqube 。
# cat sonarqube_conf/sonar.properties
sonar.web.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.8.1.jar=web
sonar.ce.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.8.1.jar=ce

重启sonarqube

[root@jeekins sonarqube8.9.0]# docker cp sonar.properties sonarqube8.9.0:/opt/sonarqube/conf/
[root@jeekins sonarqube8.9.0]# docker restart sonarqube8.9.0

然后就可以看到插件了

使用的时候,扫描参数增加分支名称

##扫描参数增加 –Dsonar.branch.name=

sonar-scanner -Dsonar.host.url=http://192.168.1.110:9000 \
-Dsonar.projectKey=devops-maven2-service \
-Dsonar.projectName=devops-maven2-service \
-Dsonar.projectVersion=1.0 \
-Dsonar.login=admin \
-Dsonar.password=admin123 \
-Dsonar.ws.timeout=30 \
-Dsonar.projectDescription="my first project!" \
-Dsonar.links.homepage=http://192.168.1.110:9080/devops/devops-maven-service \
-Dsonar.links.ci=http://192.168.1.110:8080/job/demo-pipeline-service/ \
-Dsonar.sources=src \
-Dsonar.sourceEncoding=UTF-8 \
-Dsonar.java.binaries=target/classes \
-Dsonar.java.test.binaries=target/test-classes \
-Dsonar.java.surefire.report=target/surefire-reports \
-Dsonar.branch.name=release-1.1.1

扫描后的效果

如果遇到错误

FAQ: 需要先把主分支扫描一遍,不然会报错。

ERROR: Error during SonarScanner execution
ERROR: No branches currently exist in this project. Please scan the main branch without passing any branch parameters.
ERROR:
ERROR: Re-run SonarScanner using the -X switch to enable full debug logging.

 

SonarQube-扫描结果关联commitid

手动安装插件

提前装好插件:https://github.com/gabrie-allaigre/sonar-gitlab-plugin/tree/4.1.0-SNAPSHOT插件的说明文档查看该插件的Readme文档。 (仅质量阈失败后才可以展示扫描报告)

[root@jeekins plugins]# pwd /data/sonarqube8.9.0/sonarqube_extensions/plugins

[root@jeekins plugins]# chmod 700 sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar 
[root@jeekins plugins]# chown sonar.sonar sonar-l10n-zh-plugin-8.9.jar 
//重启sonarqube
docker restart sonarqube8.9.0

获取参数

-Dsonar.gitlab.failure_notification_mode 值为commit-status表示更改提交状态, 值为nothing不做任何动作。

-Dsonar.gitlab.commit_sha参数获取方法

随便一个id就行

-Dsonar.gitlab.project_id获取方法

-Dsonar.gitlab.user_token参数获取方法[这个最好使用sonar用户的]

sonar.groovy

            sonar-scanner -Dsonar.host.url=http://192.168.1.110:9000 \
                -Dsonar.projectKey=${projectName} \
                -Dsonar.projectName=${projectName} \
                -Dsonar.projectVersion=${BUILD_ID} \
                -Dsonar.login=${AUTH_TOKEN} \
                -Dsonar.ws.timeout=30 \
                -Dsonar.projectDescription="my first project!" \
                -Dsonar.links.homepage=http://192.168.1.110:9080/${groupName}/${projectName} \
                -Dsonar.links.ci=http://192.168.1.110:8080/job/${groupName}/job/${projectName}/ \
                -Dsonar.sources=./demo/src \
                -Dsonar.sourceEncoding=UTF-8 \
                -Dsonar.java.binaries=./demo/target/classes \
                -Dsonar.java.test.binaries=./demo/target/test-classes \
#多分支扫描
                -Dsonar.core.codeCoveragePlugin=jacoco \
                -Dsonar.jacoco.reportPaths=./demo/target/jacoco.exec \
                -Dsonar.java.surefire.report=./demo/target/surefire-reports \
                -Dsonar.branch.name=release-1.1.1 \
#gitlab commitid参数
                -Dsonar.gitlab.commit_sha=f898a9fdbd319e68d519aa2ff42ad80da5186103 \
                -Dsonar.gitlab.ref_name=main \
                -Dsonar.gitlab.project_id=17 \
                -Dsonar.dynamicAnalysis=reuseReports \
                -Dsonar.gitlab.failure_notification_mode=commit-status \
                -Dsonar.gitlab.url=http://192.168.1.110:9080 \
                -Dsonar.gitlab.user_token=CwmDA_4TKevDPRh4_SEf \
                -Dsonar.gitlab.api_version=v4

命令行 

            sonar-scanner -Dsonar.host.url=http://192.168.1.110:9000 \
                -Dsonar.projectKey=demo-sharedlibrary \
                -Dsonar.projectName=demo-sharedlibrary \
                -Dsonar.projectVersion=1.1\
                -Dsonar.login=admin  \
	        -Dsonar.password=admin123 \
                -Dsonar.ws.timeout=30 \
                -Dsonar.projectDescription="my first project!" \
                -Dsonar.links.homepage=http://192.168.1.110:9080/demo/demo-sharedlibrary \
                -Dsonar.links.ci=http://192.168.1.110:8080/job/demo/job/demo-sharedlibrary \
                -Dsonar.sources=./demo/src \
                -Dsonar.sourceEncoding=UTF-8 \
                -Dsonar.java.binaries=./demo/target/classes \
                -Dsonar.java.test.binaries=./demo/target/test-classes \
                -Dsonar.core.codeCoveragePlugin=jacoco \
                -Dsonar.jacoco.reportPaths=./demo/target/jacoco.exec \
                -Dsonar.java.surefire.report=./demo/target/surefire-reports \
                -Dsonar.branch.name=release-1.1.1 \
                -Dsonar.gitlab.commit_sha=83153efc3815ec563dc874c8ea7a6a4b68088a87 \
                -Dsonar.gitlab.ref_name=main \
                -Dsonar.gitlab.project_id=11 \
                -Dsonar.dynamicAnalysis=reuseReports \
                -Dsonar.gitlab.failure_notification_mode=commit-status \
                -Dsonar.gitlab.url=http://192.168.1.110:9080 \
                -Dsonar.gitlab.user_token=osdanhsx33zyLrwNHw2K \
                -Dsonar.gitlab.api_version=v4

和gitlab集成成功后  commitid会有提示 点开它

质量阈设置的值失败的时候才会展示报告

SonarQube-控制代码扫描步骤运行

stage("SonarScan"){
	when {
		environment name: 'skipSonar', value: 'false'
	}
}

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年10月19日16:11:36
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
SonarQube-jenkins集成 SonarQube

SonarQube-jenkins集成

SonarQube-jenkins集成 两种方式: 1. 使用命令行方式 2. 使用Jenkins扩展插件的方式。 1.4.1 命令行方式 流水线中添加代码扫描阶段, 然后在script标签中定义一段...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: