1.什么是Sonarqube?
簡單來說就是一個靜態(tài)代碼掃描平臺柿冲。Sonarqube有五大特性,分別為Continuous Inspection兆旬、Detect Tricky Issues假抄、Multi-Language、DevOps Integration丽猬、Centralize Quality宿饱,如圖1所示。
對于這五大特性脚祟,其中又包含不同的小特性谬以,如圖2所示。如需了解Sonarqube每種特性是做什么的由桌,請?jiān)L問Sonarqube官網(wǎng)为黎。
我們初步來看看Multi-Language這個特性,Sonarqube它支持超過20種編程語言行您,如圖3所示铭乾。
2.IDEA與Jenkins中對應(yīng)的Sonarqube插件介紹
在IDEA上有相關(guān)Sonarqube的插件,主要是SonarLint和SonarQube Community Plugin娃循,如圖4所示炕檩。筆者主要使用的是SonarLint這個插件,如若想詳細(xì)了解SonarLint插件淮野,請?jiān)L問SonarLint相關(guān)網(wǎng)頁捧书。
當(dāng)然,Sonarqube也支持當(dāng)前最火的持續(xù)集成工具Jenkins骤星。在Jenkins中常用的Sonarqube插件主要就是SonarQube Scanner for Jenkins经瓷,如圖5所示。
3.Sonarqube支持的平臺和數(shù)據(jù)庫
Sonarqube支持的平臺有Windows洞难、Max OS舆吮、Liunx和Docker等,支持的數(shù)據(jù)庫有Mysql队贱、PostgreSQL色冀、Oracle、SQLServer等柱嫌,如圖6所示锋恬。下載Sonarqube安裝文件,請點(diǎn)擊訪問Sonarqube官網(wǎng)的Download頁面;目前嬉挡,官網(wǎng)提供的Sonarqube安裝文件是一個ZIP的壓縮包。
4.Docker下安裝Sonarqube
由于禽拔,在Windows索守、Mac OS晕窑、Linux平臺搭建相對比較復(fù)雜。筆者選用Docker方式進(jìn)行Sonarqube環(huán)境的搭建操作卵佛。
【PS】筆者使用的Linux為Ubuntu Server 16.04.3
4.1 Sonarqube鏡像的搜索
對于Docker相關(guān)鏡像的搜索杨赤,主要分為兩種方式,在Docker Hub網(wǎng)頁中搜索和使用命令#docker search 鏡像名截汪。
【方式1】在Docker Hub,你可以搜索到Sonarqube官方提供的Docker Images疾牲,如圖7所示。
【方式2】使用#docker search sonarqube進(jìn)行sonarqube相關(guān)Images的搜索操作挫鸽;其中说敏,標(biāo)記為OFFICIAL 為官方提供的鏡像,如圖8所示丢郊。
#Code
#docker search搜索sonarqube相關(guān)鏡像
docker search sonarqube
4.2 Sonarqube鏡像的Pull
筆者使用的Docker是安裝在VM虛擬機(jī)上的Ubuntu Server 16.0.4.3盔沫,你可以通過命令# docker pull sonarqube將遠(yuǎn)程鏡像倉庫中的sonarqube鏡像pull拉取到本地。對于docker pull鏡像枫匾,下載慢的問題架诞,你可以使用阿里docker加速器 或者 使用daocloud提供的docker加速器。
#Code
#docker pull拉取sonarqube鏡像
docker pull sonarqube
4.3 Sonarqube鏡像的Run運(yùn)行
在Docker Hub的Sonarqube頁面中干茉,官方給出了如何使用Sonarqube鏡像的方式谴忧,如圖9所示。
使用基本的Run方式后角虫,Sonarqube頁面如圖10所示沾谓。
#Sonarqube基本Run方式
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube
從圖10,我們可以得知“基本的Run方式”是使用內(nèi)嵌數(shù)據(jù)庫戳鹅。缺點(diǎn)是內(nèi)嵌數(shù)據(jù)庫只能用于測試場景均驶,內(nèi)嵌數(shù)據(jù)庫無法擴(kuò)展,也無法升級到新版本的SonarQube枫虏,并且不能支持將你的數(shù)據(jù)遷移至其他數(shù)據(jù)庫引擎妇穴。
[建議] 采用圖9中的“關(guān)聯(lián)外部數(shù)據(jù)庫Run”的方式來使用Sonarqube,筆者推薦采用“Sonarqube+PostgreSQL”這樣的組合方式隶债。
5.對Sonarqube官方鏡像進(jìn)行改造
對于腾它,Sonarqube官方的Docker鏡像需要說明的是,鏡像版本更新為最新的V6.7.1,默認(rèn)語言為英文死讹,鏡像系統(tǒng)是基于Debian9,系統(tǒng)登錄端口為9000瞒滴,系統(tǒng)登錄的用戶名和密碼均為admin,數(shù)據(jù)庫的登錄連接用戶名、密碼和數(shù)據(jù)庫名均為sonar赞警。
序號 | 改造項(xiàng) | 改造后的屬性值 |
---|---|---|
1 | 默認(rèn)語言設(shè)置 | 中文 |
2 | 系統(tǒng)的鏡像源 | 阿里的Debian |
3 | 缺失一些常用工具 | (安裝)wget妓忍、curl稀并、vim、lrzsz |
4 | 默認(rèn)時區(qū) | Aisa/ShangHai |
筆者在Sonarqube官方Docker Images的基礎(chǔ)上单默,結(jié)合下述改造點(diǎn)對Image進(jìn)行修改,最后docker commit到Docker Hub中忘瓦。筆者修改后的Sonarqube鏡像搁廓,請?jiān)L問筆者Docker Hub相關(guān)頁面,如圖11所示。
6.docker-compose啟動sonarqube的yml文件詳情
#這是一個利用docker-compose來構(gòu)建【sonarqube6.7+PostgreSQL】環(huán)境的yml文件
#sonarqube6.7的登錄用戶和密碼均為admin耕皮,登錄頁面的端口為9000境蜕。
#PostgreSQL數(shù)據(jù)庫的用戶和密碼均為sonar[可以在瀏覽器輸入ip+8088或navicat工具訪問數(shù)據(jù)庫]。
#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------
version: "3.3"
services:
db:
image: postgres
container_name: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
adminer:
image: adminer
restart: always
ports:
- 8088:8080
sonarqube6.7:
image: jamesz2011/sonarqube6.7:latest
container_name: sonarqube
ports:
- "9000:9000"
- "9092:9092"
volumes:
- /etc/localtime:/etc/localtime:ro
links:
- db
environment:
- SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
7.yml文件的使用方式
命令:# docker-compose f postgres_sonarqube.yml up凌停。整個啟動過程可能需要超過10分鐘粱年,請耐心等待。
CODE
#docker-compose啟動postgres_sonarqube.yml
docker-compose -f postgres_sonarqube.yml up #不加-d參數(shù)能看到docker-compose運(yùn)行的日志信息
#或
docker-compose -f postgres_sonarqube.yml up -d #加-d參數(shù),在后臺運(yùn)行罚拟,不能看到docker-compose運(yùn)行的日志信息
【建議】 使用 #docker-compose -f postgres_sonarqube.yml up 的方式啟動台诗,如圖12所示。
8.docker-compose成功啟動的標(biāo)志
如果赐俗,docker-compose執(zhí)行yml文件無誤拉队,可見到成功后的Sonarqube頁面,如圖13所示阻逮。Sonarqube登錄頁面的用戶名和密碼均為admin粱快。
筆者中postgres_sonarqube.yml文件中還添加了一個叫adminer的鏡像,你可以通過8088端口在瀏覽器上訪問操作Postgres數(shù)據(jù)庫叔扼,如圖14所示事哭。
如果,你不喜歡在網(wǎng)頁上操作數(shù)據(jù)庫瓜富,你也可以使用Navicat for PostgreSQL工具進(jìn)行相關(guān)操作鳍咱,下表是Postgres數(shù)據(jù)庫遠(yuǎn)程連接的相關(guān)配置信息。
Postgres數(shù)據(jù)庫遠(yuǎn)程連接 | 屬性 |
---|---|
用戶名 | sonar |
密碼 | sonar |
端口號 | 5432 |
sonarqube使用的數(shù)據(jù)庫名 | sonar |
9.一鍵啟動Sonarqube環(huán)境的Shell腳本文件
9.1.Shell腳本文件內(nèi)容
Shell腳本屬性 | 值 |
---|---|
名稱 | ifSonarqube.sh |
地址 | https://github.com/jamesz2011/sonarqube/blob/master/ifSonarqube.sh |
#此腳本---用來一鍵啟動Sonarqube環(huán)境
#----------------------------------------------------------
#判斷是否存在Sonarqube環(huán)境是否啟動
docker ps | grep sonarqube postgres &> /dev/null
#如果沒有啟動食呻,使用docker-compose啟動相關(guān)的sonarqube容器
if [ $? -ne 0 ]
then
echo "sonarqube is not up,we will start up it!!!"
wget https://github.com/jamesz2011/sonarqube/raw/master/postgres_sonarqube.yml
#docker-compose -f postgres_sonarqube.yml up -d
docker-compose -f postgres_sonarqube.yml up
else
echo "Sonarqube is up!!!"
fi
echo "---------------------------------------------------------"
echo "請等待10分鐘流炕,sonarqube環(huán)境有點(diǎn)費(fèi)時間!=霭每辟!"
echo "----------------------------------------------------------"
9.2.Shell腳本文件用法:
wget https://github.com/jamesz2011/sonarqube/raw/master/ifSonarqube.sh
sudo chmod a+x ifSonarqube.sh
sudo apt-get update && apt-get install -y dos2unix
sudo dos2unix ifSonarqube.sh
sudo source ifSonarqube.sh
本文END,請盡情使用Sonarqube吧。