一、sonar簡介
1、概述
Sonar (SonarQube)是一個開源平台,用於持續檢查代碼質量,不只是一個質量數據報告工具,更是代碼質量管理平台。
支持Java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十幾種編程語言的代碼質量管理與檢測。
2、實例組件
SonarQube 實例包含三個組件: 1、SonarQube server運行以下進程: 為 SonarQube 用戶界面提供服務的 Web Server。 基於 Elasticsearch 的Search Server。 負責處理代碼分析報告並將其保存在 SonarQube 數據庫中的compute engine(計算引擎)。 2、存儲以下內容的數據庫: 代碼掃描期間生成的代碼質量和安全性指標和問題。 SonarQube 實例配置。 3、在您的構建或持續集成服務器上運行的一個或多個Scanner(掃描器)來分析項目。
3、搭建前准備
服務器要求:由於sonar使用嵌入式elasticsearch,主機要符合es生產模式要求和文件描述符配置。需要以root身份運行一下參數: sysctl -w vm.max_map_count=262144 sysctl -w fs.file-max=65536 ulimit -n 65536 ulimit -u 4096 sonarqube需要數據庫的支持: 微軟 SqlServer Oracle PostgreSQL MySQL(sonarqube7.9以上已不再支持mysql數據庫)
服務版本
sonarqube:8.9.1-community (192.168.1.20)
postgresql:latest (192.168.1.20)
jenkins+gogs搭建代碼自動化運維部署平台
二、Docker搭建PostgreSQL數據庫
mkdir -p /server/docker/postgresql/data
docker run --name postgresql -p 5432:5432 \ -e POSTGRES_PASSWORD=123456 \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v /etc/localtime:/etc/localtime:or \ -v /server/docker/postgresql/data:/var/lib/postgresql/data \ -itd postgres
創建sonar數據庫及用戶名密碼:
登錄數據庫:psql psql -d [databasename] #登錄其他數據庫 創建用戶:create user sonar password 'sonar'; 參照template0(模板數據庫)創建用戶數據庫: create database sonar template template0 owner sonar; 將sonar數據庫的所有權限都賦予sonar用戶: grant all privileges on database sonar to sonar;
三、Docker搭建SonarQube
1、搭建sonarqube
啟動測試sonar,並復制文件到宿主機,做目錄映射:
docker run -d --name sonar -p 9000:9000 sonarqube:8.9.1-community
mkdir -p /server/docker/sonarqube
docker cp sonar:/opt/sonarqube/conf /server/docker/sonarqube
docker cp sonar:/opt/sonarqube/data /server/docker/sonarqube
docker cp sonar:/opt/sonarqube/logs /server/docker/sonarqube
docker cp sonar:/opt/sonarqube/extensions /server/docker/sonarqube
docker rm -f sonar #刪除測試sonarqube
啟動正式sonar:
docker run -d --name sonar -p 9000:9000 \ -e SONARQUBE_JDBC_URL=jdbc:postgresql://192.168.1.20:5432/sonar \ -e SONARQUBE_JDBC_USERNAME=sonar \ -e SONARQUBE_JDBC_PASSWORD=sonar \ -v /etc/localtime:/etc/localtime:or \ -v /server/docker/sonarqube/conf:/opt/sonarqube/conf \ -v /server/docker/sonarqube/data:/opt/sonarqube/data \ -v /server/docker/sonarqube/logs:/opt/sonarqube/log \ -v /server/docker/sonarqube/extensions:/opt/sonarqube/extensions \ -itd sonarqube:8.9.1-community
SONARQUBE_JDBC_URL=jdbc:postgresql://192.168.1.20:5432/sonar #postgresql的ip、端口、數據庫名 SONARQUBE_JDBC_USERNAME=sonar #postgresql的用戶名 SONARQUBE_JDBC_PASSWORD=sonar #postgresql的密碼 -v /etc/localtime:/etc/localtime:or #容器跟宿主機時間同步
訪問sonar:192.168.1.20:9000 默認賬戶名密碼:admin/admin
2、sonar頁面漢化
administrator——marketplace——plugins搜索Chinese——Chinese pack,install——restart server重啟
漢化完成:
四、Jenkins頁面配置持續審查項目代碼
登錄Jenkins管理頁面,插件管理——安裝插件“sonarqube scanner”
1、配置連接sonarqube服務器
Jenkins系統管理——系統設置——SonarQube servers——add sonarqube
Server authentication token是sonarqube服務的登錄憑證,登錄到sonarqube頁面,創建用戶token,然后填到此處即可:
2、安裝sonarqube工具
系統管理——全局工具配置——SonarQube Scanner——選擇自動安裝
3、項目中配置sonarqube
進入項目配置中,構建——增加構建步驟——選擇“Execute SonarQube Scanner”
然后配置 Execute SonarQube Scanner分析源碼:
Analysis properties 填寫配置:
sonar.projectKey= sonar.projectName= #這個可自定義,報告發送到sonarqube后,sonarqube將創建以此命名的project
sonar.projectVersion=1.0 #項目版本號
sonar.language=java #表示分析java源代碼
sonar.java.source=11 #表示jdk版本
sonar.java.binaries=gateway-service #jenkins項目中有多個項目名,就寫需要構建jar包的那個項目名;只有一個項目就寫“.”。
sonar.sources=gateway-service/src #表示源代碼目錄
sonar.sourceEncoding=UTF-8
sonar.scm.disabled=true
4、查看分析結果
選擇分支構建jenkins 項目后,分析結果將發送到sonarqube:
點擊SonarQube將進入sonar 分析結果頁面:
jenkins+sonar審查源碼完成。
五、jenkins+sonarqube搭建過程遇到的報錯