1. 摘要
本文講解使用SonarQube和SonarQube Scanner如何配合做代碼檢查配置攒钳,并完成所有部署實踐铺韧。
2.實踐內(nèi)容
2.1 前置配置
參考《【DevOps實踐】4. Ubuntu下安裝配置代碼檢測工具SonarQube+MySQL》,我們已經(jīng)完成了SonarQube環(huán)境搭建底挫。訪問網(wǎng)址為:https://sonar.artarva.com/犁享。
參考《【DevOps實踐】3. Jenkins流水線搭建golang項目持續(xù)集成環(huán)境》,我們已經(jīng)完成了Jenkins集成環(huán)境搭建再来,并且完成了一個GO項目的流水線下載代碼鹰霍,編譯闻鉴,部署的完整持續(xù)集成流程。訪問網(wǎng)址為:
https://jenkins.artarva.com/
我們接下來要做的是采用SonarQube獨立實現(xiàn)代碼質(zhì)量掃碼茂洒,然后把該功能集成到Jenkins環(huán)境中孟岛。
2.2 使用sonar單獨完成一個GO項目的代碼檢查
配置好sonar的服務(wù)端后,接下來就要使用sonar檢測我們的代碼了督勺,sonar主要是借助客戶端檢測工具來檢測代碼渠羞,所以要使用sonar就必須先在我們本地配置好客戶端檢測工具。
客戶端可以通過IDE插件玷氏、Sonar-Scanner插件堵未、Ant插件和Maven插件方式進(jìn)行掃描分析腋舌。常用的有掃描器有Sonar-Scanner和Sonar-Runner盏触,使用起來都差不多。這里我使用Sonar-Scanner來作為檢測客戶端块饺。
2.2.1 安裝sonar scanner
(1) 安裝
最好用sonar-scanner-2.8版本赞辩,支持jdk1.8,否則其他版本會出錯授艰。
cd /opt
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-2.8.zip
unzip sonar-scanner-2.8.zip # 解壓后辨嗽,目錄名改為sonar-scanner
mv sonar-scanner-2.8 sonar-scanner
(2) 配置sonar qube和sonar scanner的環(huán)境變量
在root賬號下配置sonar用戶的sudo權(quán)限
chmod u+w /etc/sudoers
vim /etc/sudoers
增加sudo授權(quán)
sonar ALL=(ALL:ALL) ALL
root賬號下,編輯/etc/profile 文件,
增加sonar環(huán)境變量信息和sonar-scanner 環(huán)境變量信息淮腾。
#sonar配置
export SONAR_HOME=/opt/sonar
export PATH=${SONAR_HOME}/bin:${PATH}
#set sonar-scanner environment
export SONAR_SCANNER_HOME=/opt/sonar-scanner
export PATH=${SONAR_SCANNER_HOME}/bin:${PATH}
執(zhí)行source ~/.bash_profile使環(huán)境變量生效糟需。
source命令通常用于重新執(zhí)行剛修改的初始化文件屉佳,使之立即生效,而不必注銷并重新登錄洲押。需要永久生效則需要reboot重啟系統(tǒng)武花。
source ~/.bash_profile
(3)編輯sonar-scanner.properties文件
vim /opt/sonar-scanner/conf/sonar-scanner.properties
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- MySQL
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
2.2.2 增加工程
(1) 在sonarQube頁面,點擊右上角的+號杈帐,增加一個工程体箕,填寫名稱。
(2) 產(chǎn)生TOKEN
Analyze "training-ip-demo" 2: 80ecdaf54216297c11a536c4ff905973a10d7f3c
(3)根據(jù)提示編輯執(zhí)行配合
選擇預(yù)覽挑童,執(zhí)行的系統(tǒng)環(huán)境累铅,如下所示:
可以獲取運行代碼:
sonar-scanner \
-Dsonar.projectKey=training-ip-demo \
-Dsonar.sources=. \
-Dsonar.host.url=https://sonar.artarva.com \
-Dsonar.login=80ecdaf54216297c11a536c4ff905973a10d7f3c
(3) 在待掃描的項目根目錄下創(chuàng)建文件 sonar-project.properties,文件內(nèi)容
vim sonar-project.properties,內(nèi)容如下:
# must be unique in a given SonarQube instance
sonar.projectKey=1: e496e00dcc53d285f39a1c1725ba1394c56779ff
# --- optional properties ---
# language
sonar.language=go
# defaults to project key
sonar.projectName=training-ip-demo
# defaults to 'not provided'
#sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Defaults to .
sonar.sources=.
sonar.exclusions=**/*_test.go,**/doc/**,**/docwatermark/**
# test file
sonar.tests=.
sonar.test.inclusions=**/*_test.go
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
(4) Linux shell下執(zhí)行掃碼分析工具
執(zhí)行命令:
sonar-scanner \
> -Dsonar.projectKey=training-ip-demo \
> -Dsonar.sources=. \
> -Dsonar.host.url=https://sonar.artarva.com \
> -Dsonar.login=80ecdaf54216297c11a536c4ff905973a10d7f3c
執(zhí)行成功,可以看到
點擊地址:https://sonar.artarva.com/dashboard?id=training-ip-demo
可以查看掃碼結(jié)果站叼。根據(jù)分析報告處理代碼吧娃兽。
2.3 Jenkins流水線集成SonarQube
2.3.1 SonarQube配置準(zhǔn)備
(1)打開TOKEN授權(quán)開關(guān)
使用Admin賬號登錄Sonar,打開Server authentication token開關(guān)尽楔。
位置:https://sonar.artarva.com/admin/settings 的Administration/Configuration/Security菜單位置换薄。
(2)獲取一個TOKEN
登錄后右上角點擊用戶名稱,選擇我的賬號翔试,進(jìn)入個人賬號設(shè)置
選擇安全頁轻要,在Generate Tokens中輸入一個名稱,如:preproduct-training-ip-demo垦缅,然后點擊Generate冲泥,生成一個token。
位置:右上角的My Account /Security/Tokens
記錄該值壁涎,例如:cb4238366e2fb9b8a89324eef5581cdec439a36d
2.3.2 在Jenkins上配置SonarQube token
在Jenkins上凡恍,打開Credentials,添加一個Global的Credential怔球,選擇Credential類型為Secret text嚼酝。
輸入Secret為上面生成的SonarQube token,例如上面的“cb4238366e2fb9b8a89324eef5581cdec439a36d”
輸入一個有意義的描述竟坛,ID可以自動產(chǎn)生闽巩。
2.3.3 在Jenkins上安裝SonarScanner插件
在Jenkins上安裝SonarScanner插件,參見:
http://redirect.sonarsource.com/plugins/jenkins.html
位置:系統(tǒng)管理/插件管理/ 担汤,安裝成功的截圖涎跨。
2.3.4 在Jenkins上配置SonarQube server
位置:系統(tǒng)管理/系統(tǒng)配置
Name:填寫一個便于記憶的名稱。
Server URL:填寫sonarQube的服務(wù)器地址崭歧,例如https://sonar.artarva.com
Server authentication token:選擇剛才在授權(quán)憑證建立的token隅很。
2.3.5 在Jenkins流水線中使用SonarQube做代碼質(zhì)量檢查
《【DevOps實踐】3. Jenkins流水線搭建golang項目持續(xù)集成環(huán)境》的pipeline腳本的基礎(chǔ)上增加一個步驟。
stage('2.代碼質(zhì)量檢查') {
steps {
sh """
/opt/sonar-scanner/bin/sonar-scanner \
-Dsonar.projectKey=preproduct-training-ip-demo \
-Dsonar.sources=. \
-Dsonar.host.url=https://sonar.artarva.com \
-Dsonar.login=cb4238366e2fb9b8a89324eef5581cdec439a36d
"""
}
}
2.3.6 執(zhí)行流水線腳本率碾,獲取結(jié)果
根據(jù)輸出提示叔营,可以查看代碼質(zhì)量檢查結(jié)果屋彪。
【點評】代碼重復(fù)率太高,評分不合格呢绒尊。
https://sonar.artarva.com/dashboard?id=preproduct-training-ip-demo
3.參考
(1)Jenkins 集成 SonarQube Scanner
https://www.cnblogs.com/cjsblog/archive/2019/04/20/10740840.html
【說明】缺少安裝 SonarQube服務(wù)器的說明
(2)GO語言檢查配置
How to run SonarQube for Go code using Jenkins
https://stackoverflow.com/questions/63832311/how-to-run-sonarqube-for-go-code-using-jenkins
https://docs.sonarqube.org/latest/analysis/languages/go/
(3)Jenkins+SonarQube+Gitlab搭建自動化持續(xù)代碼掃描質(zhì)量平臺
https://blog.csdn.net/zuozewei/article/details/84539396
【說明】介紹sonar的作用整體撼班。
(4) SonarQube集成golang檢測
https://blog.csdn.net/baidu_36943075/article/details/90634160
(5)使用Jenkins流水線集成SonarQube做代碼質(zhì)量分析
https://blog.csdn.net/nklinsirui/article/details/90518618
(6)GO項目配置
https://docs.sonarqube.org/latest/analysis/languages/go/
(7) sonarqube SonarGo 搭建和golang代碼檢視的使用教程
http://www.reibang.com/p/95ae320aa46d