频道
bg

sonarqube

coding一月 28, 20211mins
QA

痛点H1

现代的开发模型都会多个分支,但是sonarqube的社区办是不支持多分支的。如果只针对master分支扫描,就会导致功能分支合并后能发现代码问题,并且这个时候才检出的问题如果全改会耗费很大的精力,这个不改那个不改的话最终又无法实施下去了;如果所有分支都扫描,sonarqube服务器上会混入各个分支的问题,非常混乱,没有参考价值。

比较理想的流程中

  1. 开发人员在本地使用sonarlint先进行本地检查
  2. 功能分支使用issue mode(preview),仅仅把结果上传到代码平台上(gitlab),不保存在sonarqube服务器上,打不到gateway要求的不让合并分支
  3. master分支的直接扫描并上传结果到sonar服务器上,全局了解项目的问题趋势

解决H1

这对上面的理想流程,第1、3点其实没有任何问题,主要是第2点,需要通过sonar gitlab plugin来实现。

sonar gitlab pluginH1

首先sonarqube需要安装sonar gitlab plugin,并配置GitLab url

evernotecid://1848B60D-4C87-4A84-B290-9CB3B50663B4/appyinxiangcom/17869242/ENResource/p120

构建H1

本地构建工具的sonarqube scanner需要传递下面的变量给插件

bash

-Dsonar.gitlab.project_id=$CI_PROJECT_PATH
-Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA
-Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME

同时需要配合issue mode才能取到结果

bash

-Dsonar.analysis.mode=preview
[
-Dsonar.analysis.serviceGroup=$GROUP_NAME
-Dsonar.analysis.commitId=$CI_COMMIT_SHA
]

示例

jsx

script:
- >-
sonar-scanner -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_LOGIN \
-Dsonar.projectKey=${GROUP_NAME}:${PROJECT_NAME} \
-Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_LOGIN \
-Dsonar.projectKey=${GROUP_NAME}:${PROJECT_NAME} \
-Dsonar.gitlab.project_id=$CI_PROJECT_PATH \
-Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA \
-Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME \
-Dsonar.analysis.mode=preview \
-Dsonar.analysis.serviceGroup=$GROUP_NAME \
-Dsonar.analysis.commitId=$CI_COMMIT_SHA \
-Dsonar.sources=.

NOTE: sonarqube7.7以后就不支持的issue mode了

正常工作的情况下,每次构建Pipeline的最后会多出一个External的Job

evernotecid://1848B60D-4C87-4A84-B290-9CB3B50663B4/appyinxiangcom/17869242/ENResource/p105

移上去还会显示错误的数量

在Commit信息中,会在有问题的代码上以comment的形式显示错误信息,以及最后的最总信息

evernotecid://1848B60D-4C87-4A84-B290-9CB3B50663B4/appyinxiangcom/17869242/ENResource/p106

NOTE: sonar gitlab plugin默认只会显示本次提交的代码的错误信息,如果需要显示所有的错误信息,需要在插件中打开配置Show all issues. (Default false, only new)

评论


新的评论

匹配您的Gravatar头像

Joen Yu

@2022 JoenYu, all rights reserved. Made with love.