Jenkins + SonarQube搭建自動化的代碼質量管理平台


本文是Jenkins + SonarQube自動化代碼審查平台的搭建過程記錄,主要記錄了Jenkins和SonarQube的集成過程,本文預設Jenkins已經通過Docker的方式搭建完成,所以不再贅述,請參考 https://hub.docker.com/_/jenkins 進行Jenkins的安裝部署。

環境

本文所使用的環境:

Jenkins ver. 2.207

java version "1.8.0_181"

sonarqube:8.5.0-community

postgres:13-alpine

安裝SonarQube

為了快速啟動sonarqube實例,我們采用docker的方式。

sonarqube默認為英文版的,檢查規則為自帶的,我們這里采用中文漢化,另外java語言加入 阿里p3c 規則。

基於Docker-compose安裝

Github有一個SonarQube快速安裝的開源項目,我們可以在它的基礎上做一些細微的修改:

使用Git Clone項目

git clone https://github.com/purgeteam/sonarqube-start
cd docker-start

修改 sonar-docker-start.yml,注意這里我們使用PostgreSQL作為SonarQube的數據庫,最新版本已經不支持MySQL。最終修改好的yaml文件內容如下:

# 漢化版+阿里p3c驗證
version: "2"

services:
  sonarqube:
    image: sonarqube:8.5.0-community
    container_name: sonarqube
    ports:
      - "9000:9000"
    networks:
      - sonarnet
    environment:
      - sonar.jdbc.url=jdbc:postgresql://postgres:5432/sonar
      - sonar.jdbc.username=sonar
      - sonar.jdbc.password=sonar
    volumes:
      - /home/data/sonarqube/data/:/opt/sonarqube/data/
      - /home/data/sonarqube/logs/:/opt/sonarqube/logs/
      - /home/data/sonarqube/extensions/:/opt/sonarqube/extensions/
      - /home/data/sonarqube/lib/bundled-plugins/:/opt/sonarqube/lib/bundled-plugins/
    depends_on:
      - postgres
    restart: unless-stopped

  postgres:
    image: postgres:13-alpine
    container_name: postgres
    ports:
      - "5432:5432"
    networks:
      - sonarnet
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar
    volumes:
      - /home/data/postgresql/:/var/lib/postgresql/
      - /home/data/postgresql/data/:/var/lib/postgresql/data/
    restart: unless-stopped

networks:
  sonarnet:
    driver: bridge

在使用docker-compose啟動容器之前,先建立好如下幾個文件夾,並copy兩個jar包到 /home/data/sonarqube/extensions/plugins下:

mkdir -p /home/data/sonarqube/data
mkdir -p /home/data/sonarqube/logs
mkdir -p /home/data/sonarqube/extensions/plugins
mkdir -p /home/data/sonarqube/lib/bundled-plugins
mkdir -p /home/data/postgresql
mkdir -p /home/data/postgresql/data

# copy兩個jar包
scp plugin/rhinoceros/sonar-pmd-plugin-3.2.0-SNAPSHOT.jar root@10.100.1.19:/home/data/sonarqube/extensions/plugins
scp plugin/sonar-l10n-zh-plugin-1.16.jar root@10.100.1.19:/home/data/sonarqube/extensions/plugins

完成上面的操作后,使用docker-compose啟動容器:

docker-compose -f sonar-docker-start.yml up -d 

啟動ok,查看控制台進行訪問localhost:9000,默認賬號密碼:admin/admin

默認規則配置

雖然已經集成了阿里P3C,但是使用的還是默認規則,這里我們需要設置為指定規則。

以admin賬號登陸,打開 質量配置 頁,點擊右上方的創建按鈕,創建 p3c profiles

首次創建會跳轉到代碼規則配置頁面,剛新建的 profile 是沒有激活任何規則的,需要手動激活

我們需要為剛創建的 p3c profile 激活 p3c 規則,點擊【激活更多規則】

跳轉到激活頁面,搜索p3c,如圖,都是以[p3c]開頭的規則。

img

批量修改->活動 p3c -> 應用 -> 成功

綁定規則成功后基本完成,我們返回質量配置,在java選擇剛設置的p3c設置為默認。

配置阿里P3C已經完成。

集成Jenkins

安裝SonarQube Plugin

管理員權限登錄Jenkins,選擇:系統管理-->插件管理-->可選插件;搜索SonarQube Plugin,勾選,安裝后重新啟動JenKins。

由於我的環境是內網環境,所以只能采取離線安裝的方式:

選擇:系統管理-->插件管理-->高級-->上傳插件,上傳插件完成安裝,離線插件的下載地址:https://plugins.jenkins.io/sonar/

配置SonarQube Scanner

除了安裝Plugin,還需要安裝Scanner作為掃描的客戶端,同樣我們采用離線安裝的方式,SonarQube Scanner的下載地址:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/ ,這里我使用了當下最新的版本,sonar-scanner-cli-4.5.0.2216-linux.zip

如果Jenkins配置了Slave節點,那么每個節點都需要安裝scanner!!!

下載之后解壓到 /var/jenkins_home/ ,並將文件夾重命名為 sonar-scanner

管理員權限登錄進入:系統管理--> 全局工具配置-->SonarQube Scanner,配置Scanner:

配置SonarQube Servers

系統管理-->系統設置-->SonarQube servers,填寫Name和Server URL,Name可以隨意填寫,Server URL就是SonarQube的url地址,除此之外,還需要配置token,token需要在在SonarQube中生成。

將生成的token配置為Jenkins的憑據:

憑據配置完成后,配置SonarQube Servers,最終效果圖如下:

img

至此,Jenkins的配置全部完成,接下來開始配置Git觸發Jenkins掃描。

Jenkins Job配置

這里假設Jenkins的Job已經配置好,我們可以選擇在 Pre Steps或者 Post Steps進行Sonar的配置,這里我選擇了在 Post Steps進行SonarQube的配置:

主要配置Analysis properties,我的配置如下:

#key和name保持一致且在sonar下唯一
sonar.projectKey=${POM_GROUPID}:${POM_ARTIFACTID}
sonar.projectName=${POM_ARTIFACTID}
#工程版本
sonar.projectVersion=${GIT_BRANCH}  
#sonar.branch.name=${GIT_BRANCH} 
#源代碼目錄
sonar.sources=$WORKSPACE
#分析的語言 
sonar.language=java
#編碼sonar.sourceEncoding=UTF-8
sonar.java.binaries=$WORKSPACE
# setting the java class version
sonar.java.source=1.8

完整配置如圖:

完成后進行自動掃描,Jenkins Job的界面和Sonar的界面分別如下:

其他

社區版的SonarQube不支持多分支的掃描,目前有個開源插件可以支持,但是只支持有限的版本,有興趣的可以嘗試一下:https://github.com/mc1arke/sonarqube-community-branch-plugin

參考

代碼質量檢測(SonarQube)整合中文版+阿里P3C

SonarQube Community 實現多分支掃描分析

安裝SonarQube Scanner進行掃描


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM