在測試左移贡茅、devops、持續(xù)集成等場景下蹈胡,代碼增量覆蓋率基本都會被討論到病涨。
落地delta覆蓋率赎懦,基本上有以下幾種做法
1励两、自研工具或者例如diff_cover等開源工具來計算增量的代碼覆蓋率
2盲憎、通過SonarQube來計算增量代碼覆蓋率
第一種方案需要很多人力投入窑眯,其實沒必要自研,本文討論第二種方案捞烟,利用sonarqube來進行delta覆蓋率計算
示意圖如下:
????????用戶往gitlab提交代碼苍息,然后pipeline通過jacoco跑覆蓋率給sonar,sonar得到相對于當前master分支的delta覆蓋率,然后通過sonar api接口獲取sonar的delta覆蓋率數(shù)據(jù)竞思,寫個判斷邏輯表谊,比如要求delta覆蓋率要大于80%,如果大于80%盖喷,job成功爆办,合入代碼。如果沒有達到课梳,則失敗并通知代碼提交人員距辆。
1、下載sonarqube
https://binaries.sonarsource.com/
如果有錢可以下develop版本暮刃,如果需要免費挑格,去https://binaries.sonarsource.com/Distribution/sonarqube/下載社區(qū)版本
另外,為了得到分支代碼相對于master分支代碼的增量沾歪,如果是社區(qū)版需要去下載插件,地址如下
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里可以寫腳本獲取剛才上傳的覆蓋率信息,并做判斷桑腮,具體用哪個接口泉哈,按自己的需求,這里就不展開描述了
總結下破讨,沒必要中間加1個Jenkins丛晦,也沒必要用什么sonar的gitlab-plugin插件