gitlab+sonar 计算delta覆盖率(java代码增量覆盖率)

在测试左移、devops、持续集成等场景下,代码增量覆盖率基本都会被讨论到。

落地delta覆盖率,基本上有以下几种做法

1、自研工具或者例如diff_cover等开源工具来计算增量的代码覆盖率

2、通过SonarQube来计算增量代码覆盖率

第一种方案需要很多人力投入,其实没必要自研,本文讨论第二种方案,利用sonarqube来进行delta覆盖率计算


示意图如下:

        用户往gitlab提交代码,然后pipeline通过jacoco跑覆盖率给sonar,sonar得到相对于当前master分支的delta覆盖率,然后通过sonar api接口获取sonar的delta覆盖率数据,写个判断逻辑,比如要求delta覆盖率要大于80%,如果大于80%,job成功,合入代码。如果没有达到,则失败并通知代码提交人员。

1、下载sonarqube

https://binaries.sonarsource.com/

如果有钱可以下develop版本,如果需要免费,去https://binaries.sonarsource.com/Distribution/sonarqube/下载社区版本

另外,为了得到分支代码相对于master分支代码的增量,如果是社区版需要去下载插件,地址如下

https://github.com/sonar-learn/sonarqube-community-branch-plugin

2、在gitlab的pipeline写法举例

mvn clean verify org.jacoco:jacoco-maven-plugin:prepare-agent install -e -X sonar:sonar -Dsonar.host.url=sonar地址 -Dsonar.login=sonar的token -Dsonar.branch.name=xxx -Dsonar.branch.target=master -U -f pom.xml

如果只想跑某个模块可以加pl=.,xxx-module,注意这里.需要加

PS:

    -Dsonar.scm.disabled=true这个千万不能加,否则没有办法算增量覆盖率

    GitLab project settings > CI/CD > General pipelines 这里要用 git clone 不能用 git fetch

这样就能算到delta覆盖率并且在sonar上可以看到(如下图)


3、获取计算好的delta覆盖率

可以看到sonarqube是提供了很多webapi的,在gitlab的pipline里可以写脚本获取刚才上传的覆盖率信息,并做判断,具体用哪个接口,按自己的需求,这里就不展开描述了


z

总结下,没必要中间加1个Jenkins,也没必要用什么sonar的gitlab-plugin插件

你可能感兴趣的:(gitlab+sonar 计算delta覆盖率(java代码增量覆盖率))