質量平台是否實現自動檢查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方式與服務器同步報告的命令