质量平台是否实现自动检查SVN、Git中的项目?
答案是能。
1.回答问题
1.1 扫描方式
SonarQube执行质量检测要运行客户端SonarQube Scanner或者maven命令,要集成SonarQube,必须要有SonarQube对应的官方插件。
官方文档提供的扫描方式,如下
https://docs.sonarqube.org/latest/analysis/overview/
- Gradle - SonarScanner for Gradle
- MSBuild - SonarScanner for MSBuild
- Maven - use the SonarScanner for Maven
- Jenkins - SonarScanner for Jenkins
- Azure DevOps - SonarQube Extension for Azure DevOps
- Ant - SonarScanner for Ant
- anything else (CLI) - SonarScanner
SonarQube integrations are supported for popular ALMs: GitHub Enterprise and GitHub.com, BitBucket Server, and Azure Devops Server.
流行的ALM支持SonarQube集成:GitHub Enterprise和GitHub.com,BitBucket Server和Azure Devops Server。
1.2 SCM集成
https://docs.sonarqube.org/7.7/analysis/scm-integration/
一般来说提交代码后,要去调用SonarQube的一种扫描方式。
SonarQube是支持git/svn的,一般在安装SonarQube时默认安装了svn/git插件,在通用配置那里可以填写信息使用,但是搜索发现很少人这么做。
1.3 idea
只用idea也能做到,不过是手动
idea自身支持svn/git,支持运行maven命令
插件Sonarlint,可以连接SonarQube,只是获取规则,不能上传
2.Jenkins
一般来说,代码质量扫描属于持续集成/构建的一部分。
Jenkins是比较成熟的第三方持续集成系统
现在流行的方案是:Jenkins + git/svn + SonarQube
2.1 安装Jenkins
下载安装包,这里我们下载war包
运行jenkins.war的方式有两种:
第一种:将其放到tomcat中运行(放到webapps目录下,启动tomcat)
第二种:直接执行 java -jar jenkins.war --httpPort=8080
https://jenkins.io/doc/pipeline/tour/getting-started/
这里我们选择第一种方式
启动tomcat(bin/startup.sh)以后访问 http://localhost:8080/jenkins/
至此,jenkins安装完成
2.2 安装SonarQube Scanner插件
安装插件
https://plugins.jenkins.io/sonar
重启jenkins
配置SonarQube
首先,在SonarQube中生成一个Token(PS:用token代替输入用户名和密码)
然后,在Jenkins中配置连接sonarqube服务器的地址,这里用到的token就是刚才在sonarqube中创建的那个token
最后,配置全局工具配置
创建任务
最最重要的是,配置SonarQubeanalysis properties
可以将其单独写到一个配置文件(sonar-project.properties)里面,也可以像这样每次都写一遍
sonar.projectKey=ks-cms-unicorn
sonar.projectName=ks-cms-unicorn
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
其中,sonar.java.binaries
属性至关重要
相关文档在这里:
https://docs.sonarqube.org/display/PLUG/Java+Plugin+and+Bytecode
本例中,创建了两个任务,方法同上
可以看到,每次构建任务都会生成一次报告
这种方式比Maven那种方式要好很多,在实际的项目中多用此方式
2.3 参考及文档
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins
最后补充一个使用Maven方式与服务器同步报告的命令