Jenkins整合sonarQube實現程式碼質量檢查過程圖解
1.sonarQube的簡介
SonarQube是一款自動化程式碼審查工具,用於檢測程式碼中的錯誤、漏洞和程式碼異味。它可以與你現有的工作流整合,以支援跨專案分支和拉取請求的連續程式碼檢查。
其工作流程如下:
如圖SonarQube由以下4個元件組成:
1.SonarQube Server:
WebServer:供開發人員,管理人員瀏覽高質量的快照並配置SonarQube例項Search Server:基於Elasticsearch的Search Server從UI進行後退搜尋(歷史)computeEngine:負責處理程式碼分析報告並將其儲存在SonarQube資料庫中
2.SonarQube Database:
SonarQube例項的配置(安全性、外掛設定等)專案、檢視等的質量快照。
3.SonarQube Plugins:伺服器上安裝了多個SonarQube外掛,可能包括語言,SCM,整合,身份驗證和管理外掛
4.SonarScanners:多種sonar掃描元件,在構建/持續整合伺服器上執行以分析專案。
關於sonar的具體介紹可參考其官網。
2.SonarQube的安裝
SonarQube提供了多種安裝方式,本文將使用docker映象的安裝方式進行演示。
1.拉取sonarQube的docker容器
$> docker pull sonarqube:8.2-community
2.建立docker資料卷
#包含資料檔案,例如嵌入式H2資料庫和Elasticsearch索引
$> docker volume create --name sonarqube_data
#包含外掛,例如語言分析器
$> docker volume create --name sonarqube_extensions
#包含有關訪問,Web流程,CE流程和Elasticsearch的SonarQube日誌
$> docker volume create --name sonarqube_logs
3.配置本地資料庫(示例使用postgresql)
如果使用postgresql的預設schema "public",則無需這一步。如果想自定義schema,則執行以下命令
ALTER USER mySonarUser SET search_path to <自定義的schema名稱>
4.啟動sonarQube
$> docker run -d --name sonarqube \
-p 9000:9000 \
#以下為給sonarQube的資料庫配置,推薦postgresql
-e SONAR_JDBC_URL=jdbc:postgresql://xxxx:5432/postgres \
-e SONAR_JDBC_USERNAME=... \
-e SONAR_JDBC_PASSWORD=... \
-v sonarqube_data:/opt/sonarqube/data \
-v sonarqube_extensions:/opt/sonarqube/extensions \
-v sonarqube_logs:/opt/sonarqube/logs \
<image_name>
本地瀏覽器訪問localhost:9000即可訪問。
3.sonarQube中建立專案步驟
1:新建專案
步驟2:填寫專案資訊
步驟3:建立令牌
步驟4:記錄令牌
建立專案完成,並且記錄下令牌,後續步驟會用到。
4.jenkins配置sonarQube外掛1.安裝sonarQube外掛
2.新增sonarQube配置
在jenkins>Manage Jenkins>global configuration中配置sonar的資訊,如下圖:
name為自定義的名字,serverURL為sonarqube的訪問地址
最後一項token需要新增。點選新增,如下圖:
型別選擇 Secret text,並將我們在第三步中得到的token填入secret欄,其餘欄目自定義。新增完後,回到上一步Server authentication token選擇剛剛新增的token。
5.專案中引入sonarQube
以下為maven單模組專案示例:
1.引入sonarqube外掛:
<!--新增引數,指定projectKey,即在sonar中建立專案時的名稱--> <properties> <sonar.projectKey>sonar-demo</sonar.projectKey> </properties> <!--新增sonarqube外掛--> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.6.0.1398</version> </plugin>
2.手動程式碼掃描
執行以下命令
mvn sonar:sonar \
-Dsonar.projectKey=sonar的專案名稱 \
-Dsonar.host.url=http://sonar的地址 \
-Dsonar.login=第三步記錄的令牌
執行完成回到sonarQube介面,可看到掃描記錄及結果:
6.jenkins
6.jenkins pipeline中整合sonarqube
在jenkinsfile中定義程式碼靜態檢查的stage,如下圖:
上圖中定義了兩個stage,1.程式碼靜態檢查 2.檢查結果分析
⚠️:檢查結果分析階段jenkins通過sonarqube的回撥來得知掃描結果,需要在sonarqube中配置webhook:
webhook域名為jenkins地址域名。
至此,在jenkins pipeline(流水線)中成功整合sonarqube,如下圖:
7.sonarQube
7.sonarQube自定義質量閥
1.建立自定義質量閥
2.
配置質量閥
3.測試
例如當閥值過高時,掃描結果不符合閥值要求,掃描結果則會失敗。
示例中我們隨便調整某個條件至當前專案無法到達的值
此時當pipeline在執行的時候,程式碼質量檢查就會失敗,因為沒有達到標準。
⚠️:所以,我們在自定義自己專案的閥值的時候要視不同的專案情況而定。
8.總結
本文介紹了在jenkins多分支流水線中整合sonarQube,從而實現在持續整合中程式碼質量檢查。文章涉及到的某些方面(jenkinsfile,sonarQube詳細使用等等)沒有詳細介紹,只是快速帶過了。sonarQube是業界知名度很高的程式碼檢查工具,也是ci/cd中的工具生態成員。深入探索它,還會發現更多有用的,有趣的特性。程式碼質量檢查時程式碼質量內建的一部分,在流水線中整合程式碼質量檢查可以及時的發現程式碼中存在的問題和缺陷,從而及時修復問題,防止技術債務的堆積(還是那句話,解決問題最好的時機時問題出現的那一刻),否則當問題堆積到一定程度的時候,修復成本會越來越高。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。