一. Linux服務(wù)器搭建sonar
官網(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