Jenkins中集成sonar檢查

一. Linux服務(wù)器搭建sonar

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

官網(wǎng)下載sonar的zip包

我是mac本地以前下好的残拐,也可以在服務(wù)器上從官網(wǎng)直接獲惹况:

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

從本地scp到服務(wù)器/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

配置環(huán)境變量

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

這里加入hehetc這個(gè)用戶的.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

這里已經(jīng)把后面sonar-scanner的也加了

改完后source ~/.bashrc

配置sonar的配置文件

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

主要配置數(shù)據(jù)庫地址检诗、用戶名胰柑、密碼

SonarQube server配置服務(wù)

創(chuàng)建一個(gè)文件: sudo vi /etc/systemd/system/sonarqube.service

文件內(nèi)容:

[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

作為服務(wù)啟動(dòng)


創(chuàng)建非root系統(tǒng)用戶

Linux系統(tǒng)中創(chuàng)建一個(gè)sonarqube用戶,來運(yùn)行SonarQube services

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

讓新建的sonarqube用戶擁有我們安裝目錄的權(quán)限:

sudo chown -Rsonarqube:sonarqube/opt/sonar

mysql中建sonar數(shù)據(jù)庫

mysql -u root -p

CREATE DATABASE sonarqube;

EXIT;

創(chuàng)建一個(gè)mysql用戶扰她,用于sonar來訪問踊兜,并賦予sonarqube庫下的權(quán)限(可修改數(shù)據(jù)):

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

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

這里我設(shè)置用戶名密碼都是sonarqube

FLUSH PRIVILEGES;

EXIT;

啟動(dòng)sonar

sudo service sonarqube start

看狀態(tài):service sonarqube status

登陸sonar

http://47.93.250.185:9000/

登陸默認(rèn)用戶名密碼都是admin

初次登陸:

hehetc:?e1914d433997e40b4d0ebfe0db75f13a622bf6e9

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

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

生成了令牌:hehetc:a5ef52df04c1df7c7b7744ab72bd8e7114cb097c

配置權(quán)限:設(shè)為必須登陸才能訪問

二. 安裝并運(yùn)行sonar-scanner

下載解壓

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

hehetc@iZ2zefiv0zhc0j39v6bod6Z:/opt/sonar$ ls

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

配置環(huán)境變量

見sonar配置環(huán)境變量捏境,已配置好

修改配置文件

修改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

這里都在一臺服務(wù)器上,localhost即可

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

建立命令鏈接

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

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

此時(shí)應(yīng)該可以sonar-scanner –h看到結(jié)果了

運(yùn)行sonar-scanner

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

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

解壓:

unzip master.zip

rm master.zip

cdsonar-scanning-examples-master/sonarqube-scanner

命令行直接調(diào)用sonar-scanner

運(yùn)行命令:

sonar-scanner -D

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

訪問sonar頁面,可看到掃描結(jié)果了:


Jenkins中集成sonar

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

Jenkins中下載sonarqube-scanner 插件

Jenkins系統(tǒng)配置:配置sonar服務(wù)器

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

sonar中的token:

maven配置settings.xml

主要是配置sonar數(shù)據(jù)庫和服務(wù)器地址

進(jìn)入服務(wù)器上maven安裝位置筷频,vi setting.xml

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

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

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

~/.m2/settings.xml

分別把標(biāo)黃部分加到對應(yīng)標(biāo)簽下(注意看setting文件中是否已經(jīng)放開了這倆標(biāo)簽,放開的話凛捏,必須放進(jìn)去担忧,不能直接復(fù)制到末尾,否則會重復(fù)):


修改maven工程的pom文件

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

添加一個(gè)sonar依賴坯癣,用于下載sonar的maven插件瓶盛。

jenkins中配置sonar服務(wù)器

系統(tǒng)管理-系統(tǒng)設(shè)置:

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


建一個(gè)jenkins job

構(gòu)建步驟:調(diào)用頂層maven目標(biāo)

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

發(fā)現(xiàn)報(bào)錯(cuò):

經(jīng)查錯(cuò),發(fā)現(xiàn)是因?yàn)閟onar web中配置了不允許非登陸訪問示罗。放開之后就好了惩猫。

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

<sonar.login></sonar.login>蚜点,但試了發(fā)現(xiàn)不行轧房,沒找到原因。

Jenkins中配置sonar-scanner

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

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

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

使用sonar-scanner插件掃描job

創(chuàng)建一個(gè)自由風(fēng)格的項(xiàng)目:配置構(gòu)建绍绘,選sonar scanner插件


其中sonar.projectKey對應(yīng)工程pom文件里的tool

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

pipeline job中加sonar

創(chuàng)建一個(gè)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 系統(tǒng)配置里的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系統(tǒng)配置里sonar服務(wù)器名稱实辑,主要用于有多個(gè)sonar服務(wù)器時(shí)指定一個(gè)。


看日志每一步做了什么:

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——加入質(zhì)量門:

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代碼檢測結(jié)果藻丢,未通過質(zhì)量閾,pipeline將會fail

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

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

??????????????????????????? error "未通過Sonarqube的代碼質(zhì)量閾檢查摄乒,請及時(shí)修改悠反!failure: ${qg.status}"

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

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

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

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



???????}

??? }

}


目前還沒有配置質(zhì)量門残黑,所以是通過了的。

在sonar中加入質(zhì)量門:

此時(shí)再運(yùn)行斋否,報(bào)錯(cuò)質(zhì)量門未通過:

修改質(zhì)量門為警告不通過梨水,但還沒達(dá)到error,則日志里failure:qg.status顯示為warn茵臭。

*47.93.250.185服務(wù)器上的jenkins

home:/var/lib/Jenkins

進(jìn)入home:

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

每個(gè)job一個(gè)config.xml對應(yīng)job的配置

每個(gè)job下一個(gè)builds文件夾存放構(gòu)建歷史疫诽。

builds下,每次構(gòu)建一個(gè)文件夾:

每此構(gòu)建下有構(gòu)建結(jié)果

build.xml?changelog.xml? log

構(gòu)建的工程存放位置:

/var/lib/jenkins/workspace

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旦委,一起剝皮案震驚了整個(gè)濱河市奇徒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缨硝,老刑警劉巖摩钙,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異查辩,居然都是意外死亡胖笛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門宜岛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來长踊,“玉大人,你說我怎么就攤上這事萍倡∩肀祝” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵遣铝,是天一觀的道長佑刷。 經(jīng)常有香客問我,道長酿炸,這世上最難降的妖魔是什么瘫絮? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮填硕,結(jié)果婚禮上麦萤,老公的妹妹穿的比我還像新娘。我一直安慰自己扁眯,他們只是感情好壮莹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姻檀,像睡著了一般命满。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绣版,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天胶台,我揣著相機(jī)與錄音歼疮,去河邊找鬼。 笑死诈唬,一個(gè)胖子當(dāng)著我的面吹牛韩脏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铸磅,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼赡矢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了阅仔?” 一聲冷哼從身側(cè)響起吹散,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霎槐,沒想到半個(gè)月后送浊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丘跌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年袭景,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闭树。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耸棒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出报辱,到底是詐尸還是另有隱情与殃,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布碍现,位于F島的核電站幅疼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昼接。R本人自食惡果不足惜爽篷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慢睡。 院中可真熱鬧逐工,春花似錦、人聲如沸漂辐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽髓涯。三九已至袒啼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瘤泪。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工灶泵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留育八,地道東北人对途。 一個(gè)月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像髓棋,于是被迫代替她去往敵國和親实檀。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容