Jenkins中集成sonar檢查

一. Linux服務器搭建sonar

https://www.digitalocean.com/community/tutorials/how-to-ensure-code-quality-with-sonarqube-on-ubuntu-16-04

官網下載sonar的zip包

我是mac本地以前下好的,也可以在服務器上從官網直接獲取:

sudo wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-7.0.zip

從本地scp到服務器/home/hehetc/software/sonar目錄下,并解壓到/opt/sonar目錄下:

scp?sonarqube-7.1.zip?hehetc@47.93.250.185:/home/hehetc/software/sonar

要解壓,需下載zip:sudo apt-get install unzip

配置環境變量

把sonar安裝目錄(到/bin)加入環境變量

這里加入hehetc這個用戶的.bashrc

vi ~/.bashrc

最后面加上:

SONAR_HOME=/opt/sonar/sonarqube-7.1

SONAR_SCANNER_HOME=/opt/sonar/sonar-scanner-4.0.0.1744-linux

export PATH=$PATH:$SONAR_HOME/bin:$SONAR_SCANNER_HOME/bin

這里已經把后面sonar-scanner的也加了

改完后source ~/.bashrc

配置sonar的配置文件

配置文件:/opt/sonar/sonarqube-7.1/conf/sonar.properties

主要配置數據庫地址、用戶名、密碼

SonarQube server配置服務

創建一個文件: sudo vi /etc/systemd/system/sonarqube.service

文件內容:

[Unit]

Description=SonarQube service

After=syslog.target network.target

[Service]

Type=forking

ExecStart=/opt/sonar/sonarqube-7.1/bin/linux-x86-64/sonar.sh start

ExecStop=/opt/sonar/sonarqube-7.1/bin/linux-x86-64/sonar.sh stop

User=sonarqube

Group=sonarqube

Restart=always

[Install]

WantedBy=multi-user.target

作為服務啟動


創建非root系統用戶

Linux系統中創建一個sonarqube用戶,來運行SonarQube services

sudo adduser --system --no-create-home--group --disabled-loginsonarqube

讓新建的sonarqube用戶擁有我們安裝目錄的權限:

sudo chown -Rsonarqube:sonarqube/opt/sonar

mysql中建sonar數據庫

mysql -u root -p

CREATE DATABASE sonarqube;

EXIT;

創建一個mysql用戶,用于sonar來訪問,并賦予sonarqube庫下的權限(可修改數據):

CREATE USER sonarqube@'localhost'IDENTIFIED BY'sonarqube';

GRANT ALL ON sonarqube.* to sonarqube@'localhost';

這里我設置用戶名密碼都是sonarqube

FLUSH PRIVILEGES;

EXIT;

啟動sonar

sudo service sonarqube start

看狀態:service sonarqube status

登陸sonar

http://47.93.250.185:9000/

登陸默認用戶名密碼都是admin

初次登陸:

hehetc:?e1914d433997e40b4d0ebfe0db75f13a622bf6e9

登陸后菜單會多出administration。在market下搜索Chinese Pack安裝中文包。

新建用戶:新建了hehetc用戶密碼yc123456

生成了令牌:hehetc:a5ef52df04c1df7c7b7744ab72bd8e7114cb097c

配置權限:設為必須登陸才能訪問

二. 安裝并運行sonar-scanner

下載解壓

下載安裝包解壓到sonar同一個目錄即可:

hehetc@iZ2zefiv0zhc0j39v6bod6Z:/opt/sonar$ ls

__MACOSX? sonarqube-7.1? sonar-scanner-4.0.0.1744-linux

配置環境變量

見sonar配置環境變量,已配置好

修改配置文件

修改conf/sonar-scanner.properties,配上sonar地址:

cd /opt/sonar/sonar-scanner-4.0.0.1744-linux/conf

sudo vi sonar-scanner.properties

#----- Default SonarQube server

sonar.host.url=http://localhost:9000

#----- Default source code encoding

#sonar.sourceEncoding=UTF-8

這里都在一臺服務器上,localhost即可

sudo chmod +x sonar-scanner-3.0.3.778-linux/bin/sonar-scanner

建立命令鏈接

把sonar-scanner安裝目錄下的bin目錄和系統命令bin目錄鏈接起來,以便無前綴隨處都可使用命令

sudo ln -s /opt/sonar/sonar-scanner-3.0.3.778-linux/bin/sonar-scanner/usr/local/bin/sonar-scanner

此時應該可以sonar-scanner –h看到結果了

運行sonar-scanner

在/home/hehetc/sonar-scanner-workspace目錄下新建了這個workspace。在里面下載一個sonar的示例工程:

wget https://github.com/SonarSource/sonar-scanning-examples/archive/master.zip

解壓:

unzip master.zip

rm master.zip

cdsonar-scanning-examples-master/sonarqube-scanner

命令行直接調用sonar-scanner

運行命令:

sonar-scanner -D

sonar.login=your_token_here (網頁中生成的hehetc的token)

訪問sonar頁面,可看到掃描結果了:


Jenkins中集成sonar

http://www.lxweimin.com/p/b35674bd2fad

Jenkins中下載sonarqube-scanner 插件

Jenkins系統配置:配置sonar服務器

token是提前新建好的訪問sonar的token(在sonar頁面為用戶名生成的)

sonar中的token:

maven配置settings.xml

主要是配置sonar數據庫和服務器地址

進入服務器上maven安裝位置,vi setting.xml

找到服務器maven安裝目錄:mvn –v可以看到

復制setting配置文件到用戶自己目錄下,這樣改了不會影響全局(修改自己的也不要sudo):

cp /usr/share/maven/conf/settings.xml

~/.m2/settings.xml

分別把標黃部分加到對應標簽下(注意看setting文件中是否已經放開了這倆標簽,放開的話,必須放進去,不能直接復制到末尾,否則會重復):


修改maven工程的pom文件

這里我直接到github上meeting-server這個springboot工程的pom文件里修改了:

添加一個sonar依賴,用于下載sonar的maven插件。

jenkins中配置sonar服務器

系統管理-系統設置:

token用在sonar的web頁面中生成的token


建一個jenkins job

構建步驟:調用頂層maven目標

sonar:sonar-Dsonar.java.binaries=target/sonar -Dmaven.test.skip=true

發現報錯:

經查錯,發現是因為sonar web中配置了不允許非登陸訪問。放開之后就好了。

另一種辦法是,在maven的setting文件配置中加上sonar登陸的用戶名密碼:

<sonar.login></sonar.login>,但試了發現不行,沒找到原因。

Jenkins中配置sonar-scanner

目前部門前端掃描才需要sonar-scanner

在系統管理-全局工具配置(注意不在系統配置)

把服務器上裝sonar-scanner的目錄配上:/opt/sonar/sonar-scanner-4.0.0.1744-linux

使用sonar-scanner插件掃描job

創建一個自由風格的項目:配置構建,選sonar scanner插件


其中sonar.projectKey對應工程pom文件里的tool

sonar.projectName是sonar里顯示的名稱,改為了tool-for-show,下面sonar里顯示的就變了。

pipeline job中加sonar

創建一個pipeline job:

腳本:

pipeline1

pipeline{

???agent any

???// tools{

???//???? maven 'maven-3.6.0'

???// }

???stages{

???????stage('Build'){

???????????steps{

?????????????? checkout([$class: 'GitSCM',branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false,extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '22fb3725-0e8c-4619-94d8-2b05a0af0369',url: 'https://github.com/hehetc/meeting-server.git']]])

?????????????? sh ' mvn clean install'

???????????}

???????}

???????stage('SonarCheck'){

???????????steps{

??????????????? sh ' mvnorg.codehaus.mojo:sonar-maven-plugin:3.6.0.1398:sonar-DprojectName="project-name" -U '

???????????}

???????}

}


credentialsId: 填入的是jenkins 系統配置里的github的credentialID

pipeline2:

pipeline{

???agent any

???// tools{

???//???? maven 'maven-3.6.0'

???// }

???stages{

???????stage('Build'){

???????????steps{

?????????????? checkout([$class: 'GitSCM',branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false,extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId:'22fb3725-0e8c-4619-94d8-2b05a0af0369', url:'https://github.com/hehetc/meeting-server.git']]])

?????????????? sh ' mvn clean compile'

???????????}

???????}

???????stage('SonarCheck'){

???????????steps{

??????????????? echo "starting codeAnalyzewith SonarQube......"

??????????????? withSonarQubeEnv('sonarqube7.1'){

??????????????????? sh "mvnsonar:sonar"

??????????????? }

???????????}???????????


???????}

}


withSonarQubeEvn里面填的是jenkins系統配置里sonar服務器名稱,主要用于有多個sonar服務器時指定一個。


看日志每一步做了什么:

maven clean compile:

Building tool 0.0.1-SNAPSHOT

[INFO] Deleting/var/lib/jenkins/workspace/pipeline-sonar/target

[INFO] Compiling 8 source files to/var/lib/jenkins/workspace/pipeline-sonar/target/classes


mvn sonar:sonar


sonar-maven-plugin:3.6.0.1398:sonar

[INFO] Base dir: /var/lib/jenkins/workspace/pipeline-sonar[INFO] Working dir: /var/lib/jenkins/workspace/pipeline-sonar/target/sonar


pipeline3——加入質量門:

pipeline{

???agent any

???// tools{

???//???? maven 'maven-3.6.0'

???// }

???stages{

???????stage('Build'){

???????????steps{

?????????????? checkout([$class: 'GitSCM',branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false,extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId:'22fb3725-0e8c-4619-94d8-2b05a0af0369', url: 'https://github.com/hehetc/meeting-server.git']]])

?????????????? sh ' mvn clean compile'

???????????}

???????}

???????stage('SonarCheck'){

???????????steps{

??????????????? echo "starting codeAnalyzewith SonarQube......"

???????????????withSonarQubeEnv('sonarqube7.1'){

??????????????????? sh "mvnsonar:sonar"

??????????????? }

??????????????? script {

??????????????? timeout(10) {

??????????????????? //利用sonar

webhook功能通知pipeline代碼檢測結果,未通過質量閾,pipeline將會fail

??????????????????? def qg =waitForQualityGate()

???????????????????????if (qg.status != 'OK'){

??????????????????????????? error "未通過Sonarqube的代碼質量閾檢查,請及時修改!failure: ${qg.status}"

??????????????????????? }

??????????????????? }

??????????????? }

???????????}



???????}

??? }

}


目前還沒有配置質量門,所以是通過了的。

在sonar中加入質量門:

此時再運行,報錯質量門未通過:

修改質量門為警告不通過,但還沒達到error,則日志里failure:qg.status顯示為warn。

*47.93.250.185服務器上的jenkins

home:/var/lib/Jenkins

進入home:

job存放位置:/var/lib/jenkins/jobs

每個job一個config.xml對應job的配置

每個job下一個builds文件夾存放構建歷史。

builds下,每次構建一個文件夾:

每此構建下有構建結果

build.xml?changelog.xml? log

構建的工程存放位置:

/var/lib/jenkins/workspace

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容