sonarqube8 和 postgresql

1、sonar資源與工作原理

資源

sonarqube-8.2.0.32929.zip (sonarqube-9+版本,除了soanrqube本身需要jdk11,貌似掃描的工程也要jdk11,待確認)

postgresql-10.18-1-linux-x64-binaries.tar.gz

jdk-11.0.12_linux-x64_bin.tar.gz

sonar-scanner-cli-4.6.2.2472-windows.zip

部署機器,使用虛擬機,IP : 192.168.25.135

工作原理

sonarqube是一個web應用,用來存儲掃描結果,供遠程訪問查看等。

sonar-scanner是掃描代碼的工具,將掃描結果上傳到sonarqueb服務器

sonarLint是一個插件,安裝到集成開發工具中IDEA,eclipse,可實時進行代碼掃描

sonarqube、sonar-scanner使用java語言開發,運行時需要jre環境

2、安裝postgreSQL

sonarqube需要數據庫,默認使用M2數據庫,7.9版本後不再支持mysql數據庫,本文使用postgreSQL數據庫。

創建postgres用戶/用戶組

groupadd postgres

useradd -g postgres postgres

postgreSQL部署在postgres用戶HOME目錄

解壓postgreSQL到

/home/postgres/pgsql

創建數據庫目錄

mkdir /home/postgres/data

初始化數據庫

/home/postgres/pgsql/bin/initdb -D /home/postgres/data/
也可以使用相對路徑(下同)

本文將postgreSQL和sonarqube部署在同一臺機器上,

如果postgreSQL和sonarqube部署在不同的機器上,則需要修改postgreSQL配置,允許遠程連接postgreSQL

修改/home/postgres/data/pg_hba.conf文件,在文件最後增加一行,該配置允許所有遠程機器連接。其中32是指IPv4網絡,如果使用的網絡是IPv6網絡改爲64

host    all             all             0.0.0.0/32               password

也可以指定ip連接。

修改/home/postgres/data/postgresql.conf 文件,

listen_addresses = '*'

啓動

/home/postgres/pgsql/bin/pg_ctl -D /home/postgres/data -l pgsql.log start

參數-D指定初始化的數據目錄,-l指定日誌文件

/home/postgres/pgsql/bin/pg_ctl -D /home/postgres/data stop

本地登錄postgreSQL數據庫

/home/postgres/pgsql/bin/psql

創建sonarqube需要的database,user等

postgres=# create user sonar with password 'sonar' ;
CREATE ROLE
postgres=# create database sonarqube owner sonar ;
CREATE DATABASE
postgres=# grant all on database sonarqube to sonar ;
GRANT

注意:每行sql語句的分號前有一空格。

3、sonarqube安裝配置

創建sonar用戶和用戶組,sonarqube中的Elasticsearch 不能使用root用戶啓動。

sonarqube 7.8版本後需要jdk11,貌似sonarqube9++,被掃描的java工程也需要jdk11,未驗證

jdk11解壓到

/home/sonar/jdk-11.0.6

sonarqube解壓到

/home/sonar/sonarqube-8.2.0.32929

sonarqube配置jdk11

/home/sonar/sonarqube-8.2.0.32929/conf/wrapper.conf
配置文件中
配置項,指定使用jdk11,高版本sonarqube必須使用jdk11
wrapper.java.command=/home/sonar/jdk-11.0.6/bin/java

sonarqube配置數據源

/home/sonar/sonarqube-8.2.0.32929/conf/sonar.properties
文件中找到postgresql的配置
sonar.jdbc.url=jdbc:postgresql://127.0.0.1/sonarqube?currentSchema=public
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

soanrqube機器參數調整

/etc/sysctl.conf文件最後添加一行,ElasticSearch需要該參數,至少262144

vm.max_map_count=262144

使修改參數生效
sysctl -p

修改機器open files,max user processes參數,改爲65536,如何修改此處不贅述。

查看open files ,max user processes 參數
ulimit -a

啓動sonarqube

/home/sonar/sonarqube-8.2.0.32929/bin/linux-x86-64/sonar.sh start

sonarqube端口默認9000,可在sonarqube-8.2.0.32929/conf/sonar.properties配置文件中修改

sonar.web.port=9000

訪問 http://192.168.25.135:9000,本文sonarqube部署在虛擬機192.168.25.135中。

4、sonar-scanner掃描代碼

下載sonar-scanner

sonar-scanner是掃描代碼的工具,sonar-scanner有多種,包括原生的,maven版本,gradle版本,ant版本,jenkins版本等

原生版本可以掃描任何工程,maven版本可以讓maven工具在構建工程的過程中調起sonar-scanner,其他版本類似。

4.1 準備工程

本地創建工程 demo-sonar,本文使用demo-sonar工程名

D:\workspace\test-demo\demo-sonar

sonarqube創建新項目,本文中project key使用工程名demo-sonar,project key很重要,sonar-scanner會使用。

點擊Set Up進入下一步,生成project的 token,該token是sonar-scanner與sonarqube交互時的認證方式之一。

輸入token的name,點擊Generate按鈕生成token,本文使用工程名demo-sonar作爲token的name,

生成token:  3f2a887f97da1e1a4edc7b98aa16700ba098532c

 

4.1 原生sonar-scanner使用

本文使用windows版本演示如何使用sonar-scanner

下載sonar-scanner-4.2.0.1873-windows

本文將sonar-scanner-4.2.0.1873-windows.zip解壓到

D:\DEV_ENV\sonar-scanner

配置環境變量,將如下目錄加入path

D:\DEV_ENV\sonar-scanner\sonar-scanner-4.2.0.1873-windows\bin

sonar-scanner的配置文件位於

$HOME/conf/sonar-scanner.properties

文件常用配置

#必選參數,sonarqube的url地址,默認http://localhost:9000
sonar.host.url=http://localhost:9000
#必選參數,項目標識,由字母、數字、和至少有一個非數字組成
sonar.projectKey=
#可選參數,在sonarqube界面上顯示的項目名稱
sonar.projectName=
#可選參數,項目版本
sonar.projectVersion=
#可選參數,該參數可用登陸sonarqube的用戶名/密碼,也可以使用sonarqube上創建的project token進行認證。
sonar.login=
#可選參數,如果sonar.login使用sonarqube的用戶名進行認證,則該參數爲sonarqube對應的用戶名的密碼
sonar.password=
#可選參數,sonar-scanner連接sonarqube的時間
sonar.ws.timeout=
#可選參數,sonar-scanner掃描的代碼目錄
sonar.sources=
#可選參數,掃描工程的字符編碼
sonar.sourceEncoding=
#可選參數,設置使用sonar-scanner觸發的分析的工作目錄(版本大於 2.0)。
sonar.working.directory=
#可選參數,項目描述
sonar.projectDescription=
#可選參數,項目主頁
sonar.links.homepage=
#可選參數,項目源存儲庫
sonar.links.scm=
#可選參數,如果自動檢測不起作用,此參數可用於顯式告訴 sonarqube 在項目上使用的 scm
sonar.scm.provider=

使用token掃描示例配置

sonar.host.url=http://192.168.25.135:9000
sonar.projectKey=demo-sonar
sonar.login=3f2a887f97da1e1a4edc7b98aa16700ba098532c
sonar.password=
sonar.sources=D:/workspace/test-demo/demo-sonar
sonar.sourceEncoding=UTF-8
sonar.working.directory=

使用sonarqube用戶名密碼掃描示例配置

sonar.host.url=http://192.168.25.135:9000
sonar.projectKey=demo-sonar
sonar.login=admin
sonar.password=123456
sonar.sources=D:/workspace/test-demo/demo-sonar
sonar.sourceEncoding=UTF-8
sonar.working.directory=

執行掃描,使用命令行

C:\Users>sonar-scanner.bat

配置文件sonar-scanner.properties中的參數也可以直接指定,如:

sonar-scanner.bat  -Dsonar.host.url=http://192.168.25.135:9000/ -Dsonar.projectKey=demo-sonar -Dsonar.login=3f2a887f97da1e1a4edc7b98aa16700ba098532c -Dsonar.password= -Dsonar.sources=D:\workspace\test-demo\demo-sonar

 

4.2 maven版本sonar-scanner使用

在maven的settings文件中配置sonar相關參數,也可以配置在工程的pom文件中,本文配置在maven的settings文件中。

<settings>

    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>

    <profiles>

        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>http://192.168.25.135:9000</sonar.host.url>
                <sonar.projectKey>demo-sonar</sonar.projectKey>
                <sonar.login>admin</sonar.login>
                <sonar.password>123456</sonar.password>
                <sonar.sourceEncoding>UTF-8</sonar.sourceEncoding>
            </properties>
        </profile>

     </profiles>

</settings>

使用maven命令掃描

mvn clean compile sonar:soanr

可指定sonar插件版本

mvn clean compile org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.0.2155:sonar

可以在mvn命令中指定sonar參數,覆蓋settings文件或工程pom文件中的配置

mvn clean compile sonar:sonar -Dsonar.host.url=http://192.168.25.135:9000 -Dsonar.java.binaries=target/sonar -Dsonar.sorceEncoding=UTF-8 -Dsonar.login=admin -Dsonar.password=123456

也可以換行

mvn clean compile sonar:sonar \
-Dsonar.host.url=http://192.168.25.135:9000 \ 
-Dsonar.java.binaries=target/sonar \ 
-Dsonar.sorceEncoding=UTF-8 \ 
-Dsonar.login=admin \ 
-Dsonar.password=123456

sonarLint使用

sonarLint是一個集成開發工具的插件,只能在集成開發工具中使用

sonarLint可以掃描工程,將掃描結果在本地顯示,供開發人員參考,也可以給sonarLint配置sonarQube,將掃描結果上傳到sonarqube上

sonarLint配置、使用較簡單,不贅述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章