您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)Jenkins使用sonarQube實(shí)現(xiàn)一個代碼質(zhì)量檢查功能,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
1.sonarQube的簡介
SonarQube是一款自動化代碼審查工具,用于檢測代碼中的錯誤、漏洞和代碼異味。它可以與你現(xiàn)有的工作流集成,以支持跨項(xiàng)目分支和拉取請求的連續(xù)代碼檢查。
其工作流程如下:
如圖SonarQube由以下4個組件組成:
1.SonarQube Server:
WebServer:供開發(fā)人員,管理人員瀏覽高質(zhì)量的快照并配置SonarQube實(shí)例Search Server:基于Elasticsearch的Search Server從UI進(jìn)行后退搜索(歷史)computeEngine:負(fù)責(zé)處理代碼分析報(bào)告并將其保存在SonarQube數(shù)據(jù)庫中
2.SonarQube Database:
SonarQube實(shí)例的配置(安全性、插件設(shè)置等)項(xiàng)目、視圖等的質(zhì)量快照。
3.SonarQube Plugins:服務(wù)器上安裝了多個SonarQube插件,可能包括語言,SCM,集成,身份驗(yàn)證和管理插件
4.SonarScanners:多種sonar掃描組件,在構(gòu)建/持續(xù)集成服務(wù)器上運(yùn)行以分析項(xiàng)目。
關(guān)于sonar的具體介紹可參考其官網(wǎng)。
2.SonarQube的安裝
SonarQube提供了多種安裝方式,本文將使用docker鏡像的安裝方式進(jìn)行演示。
1.拉取sonarQube的docker容器
$> docker pull sonarqube:8.2-community
2.創(chuàng)建docker數(shù)據(jù)卷
#包含數(shù)據(jù)文件,例如嵌入式H2數(shù)據(jù)庫和Elasticsearch索引
$> docker volume create --name sonarqube_data
#包含插件,例如語言分析器
$> docker volume create --name sonarqube_extensions
#包含有關(guān)訪問,Web流程,CE流程和Elasticsearch的SonarQube日志
$> docker volume create --name sonarqube_logs
3.配置本地?cái)?shù)據(jù)庫(示例使用postgresql)
如果使用postgresql的默認(rèn)schema "public",則無需這一步。如果想自定義schema,則執(zhí)行以下命令
ALTER USER mySonarUser SET search_path to <自定義的schema名稱>
4.啟動sonarQube
$> docker run -d --name sonarqube \
-p 9000:9000 \
#以下為給sonarQube的數(shù)據(jù)庫配置,推薦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中創(chuàng)建項(xiàng)目步驟
1:新建項(xiàng)目
步驟2:填寫項(xiàng)目信息
步驟3:創(chuàng)建令牌
步驟4:記錄令牌
創(chuàng)建項(xiàng)目完成,并且記錄下令牌,后續(xù)步驟會用到。
4.jenkins配置sonarQube插件1.安裝sonarQube插件
2.添加sonarQube配置
在jenkins>Manage Jenkins>global configuration中配置sonar的信息,如下圖:
name為自定義的名字,serverURL為sonarqube的訪問地址
最后一項(xiàng)token需要添加。點(diǎn)擊添加,如下圖:
類型選擇 Secret text,并將我們在第三步中得到的token填入secret欄,其余欄目自定義。添加完后,回到上一步Server authentication token選擇剛剛添加的token。
5.項(xiàng)目中引入sonarQube
以下為maven單模塊項(xiàng)目示例:
1.引入sonarqube插件:
<!--添加參數(shù),指定projectKey,即在sonar中創(chuàng)建項(xiàng)目時的名稱--> <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.手動代碼掃描
執(zhí)行以下命令
mvn sonar:sonar \
-Dsonar.projectKey=sonar的項(xiàng)目名稱 \
-Dsonar.host.url=http://sonar的地址 \
-Dsonar.login=第三步記錄的令牌
執(zhí)行完成回到sonarQube界面,可看到掃描記錄及結(jié)果:
6.jenkins
6.jenkins pipeline中集成sonarqube
在jenkinsfile中定義代碼靜態(tài)檢查的stage,如下圖:
上圖中定義了兩個stage,1.代碼靜態(tài)檢查 2.檢查結(jié)果分析
⚠️:檢查結(jié)果分析階段jenkins通過sonarqube的回調(diào)來得知掃描結(jié)果,需要在sonarqube中配置webhook:
webhook域名為jenkins地址域名。
至此,在jenkins pipeline(流水線)中成功集成sonarqube,如下圖:
7.sonarQube
7.sonarQube自定義質(zhì)量閥
1.創(chuàng)建自定義質(zhì)量閥
2.
配置質(zhì)量閥
3.測試
例如當(dāng)閥值過高時,掃描結(jié)果不符合閥值要求,掃描結(jié)果則會失敗。
示例中我們隨便調(diào)整某個條件至當(dāng)前項(xiàng)目無法到達(dá)的值
此時當(dāng)pipeline在運(yùn)行的時候,代碼質(zhì)量檢查就會失敗,因?yàn)闆]有達(dá)到標(biāo)準(zhǔn)。
所以,我們在自定義自己項(xiàng)目的閥值的時候要視不同的項(xiàng)目情況而定。
8.總結(jié)
本文介紹了在jenkins多分支流水線中集成sonarQube,從而實(shí)現(xiàn)在持續(xù)集成中代碼質(zhì)量檢查。文章涉及到的某些方面(jenkinsfile,sonarQube詳細(xì)使用等等)沒有詳細(xì)介紹,只是快速帶過了。sonarQube是業(yè)界知名度很高的代碼檢查工具,也是ci/cd中的工具生態(tài)成員。深入探索它,還會發(fā)現(xiàn)更多有用的,有趣的特性。代碼質(zhì)量檢查時代碼質(zhì)量內(nèi)建的一部分,在流水線中集成代碼質(zhì)量檢查可以及時的發(fā)現(xiàn)代碼中存在的問題和缺陷,從而及時修復(fù)問題,防止技術(shù)債務(wù)的堆積(還是那句話,解決問題最好的時機(jī)時問題出現(xiàn)的那一刻),否則當(dāng)問題堆積到一定程度的時候,修復(fù)成本會越來越高。
以上就是Jenkins使用sonarQube實(shí)現(xiàn)一個代碼質(zhì)量檢查功能,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。