目前我们使用CI工具主要是Jenkins,所以此相互选择了jenkins进行集成。根据实际情况,也可选择GitlabCI等工具。
实施代码检测,Gitlab 代码变更(Push/Merge),触发Jenkins Job执行SonarScanner扫描代码,SonarServer通过Gitlab插件,将代码扫描完的结果回写至Gitlab,GitLab即可查看到对应Sonar检测的结果代码注释,方便开发人员代码排查
实现目的
- 1、研发过程,Jenkins在构建过程,加入SonarQube的代码质量门,检测本次构建增量代码质量
- 2、定期的全量代码质量扫描,在每周定期对公司所有代码进行全量扫描,产出代码质量报告
集成插件配置
1、Jenkins插件&配置
插件:
- SonarQubeScannerForJenkins
配置:
- SonarServer配置:Manage Jenkins – > Configure System – > SonarQube servers
需要SonarQube基于高权限账号生成的 授权token (SonarQube:Administration – > Security – > Users) - SonarScanner配置:Manage Jenkins – > Global Tool Configuration – > SonarQube Scanner
备注:这里安装多个SonarQube Scanner,为多项目并行代码扫描做准备
2、SonarQube配置
插件:
实现gitlab打通,同时实现gitlab auth授权登陆。
- sonar-gitlab-plugin:https://github.com/javamachr/sonar-gitlab-plugin
- **sonar-auth-gitlab-plugin:**https://github.com/gabrie-allaigre/sonar-auth-gitlab-plugin
**Sonar Serverbase Url设置:**Administration > Configuration > General> Server base URL
Webhook配置:(实操,不配置,JEnkins在获取质量门结果时会无限等待)
Administration > Configuration > Webhooks. The URL should point to your Jenkins server: http://{JENKINS_HOST}/sonarqube-webhook/
具体说明:参考Jenkins官方文档说明(Configure a webhook in your SonarQube server pointing … )
Gitlab授权登陆:
Administration > Configuration > GitLab > Authentication :设置对应的 Application ID + Secret
(设置参数说明,参考对应的插件说明:sonar-auth-gitlab-plugin)
Gitlab Reporting配置:
-
作用:可以将检测结果报告已comment的形式回写至Gitlab的Commit中(注:目前版本不支持inline comment in commit,现在只有global comment,具体看附属问题记录说明)
-
配置:Administration > Configuration > GitLab > Reporting
-
参数:扫描时需要配置参数:sonar.gitlab.project_id
说明:这个可以根据实际需求配置说明,此处可根据需求配置将检测的结果是否以comment回写。此处暂时不配置。
3、Gitlab配置
授权登陆设置:
Admin Settings -> Application:设置对应的回调:https://
问题记录
- SonarCloud + GitHub + Pull Request Analysis = No Inline Comments:https://community.sonarsource.com/t/sonarcloud-github-pull-request-analysis-no-inline-comments/7371/2
目前最后支持的版本:sonarqube v7.6 - 新扫描项目(新sonar project key) No branches currently exist in this project. Please scan the main branch without passing any branch parameters
注:新项目必须先扫描 master(稳定)分支,才可以进行其他分支的扫描 - 不建议写入sonar.language扫描参数: https://community.sonarsource.com/t/what-is-the-alternative-to-the-sonar-language-property-in-the-current-version-of-sonarqube/3993
- SonarQube插件矩阵(可查看相关产检兼容情况):https://docs.sonarqube.org/latest/instance-administration/plugin-version-matrix/