程式碼品質檢測(SonarQube)整合中文版+阿里P3C

  • 2019 年 10 月 3 日
  • 筆記

程式碼品質檢測(SonarQube)整合中文版+阿里P3C

簡介

SonarQube是一種自動程式碼審查工具,用於檢測程式碼中的錯誤,漏洞和程式碼異味。它可以與您現有的工作流程集成,以便在項目分支和拉取請求之間進行連續的程式碼檢查。
img

連續程式碼檢查,sonar可以單獨使用MavenGradle推送程式碼檢查,當然也可以在ci引擎進行程式碼自動檢查,如: JenkinsGit

服務端

安裝

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

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

使用git克隆項目:

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

sonar-docker-start.yml 模板如下:

# 漢化版+阿里p3c驗證  version: "2"    services:    sonarqube:      image: sonarqube      ports:        - "9000:9000"      networks:        - sonarnet      environment:        - sonar.jdbc.url=jdbc:postgresql://db:5432/sonar      volumes:        - sonarqube_conf:/opt/sonarqube/conf        - sonarqube_data:/opt/sonarqube/data        - sonarqube_extensions:/opt/sonarqube/extensions        - sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins        - ./plugin/rhinoceros/sonar-pmd-plugin-3.2.0-SNAPSHOT.jar:/opt/sonarqube/extensions/plugins/sonar-pmd-plugin-3.2.0-SNAPSHOT.jar        - ./plugin/sonar-l10n-zh-plugin-1.16.jar:/opt/sonarqube/extensions/plugins/sonar-l10n-zh-plugin-1.16.jar      db:      image: postgres      ports:        - "5432:5432"      networks:        - sonarnet      environment:        - POSTGRES_USER=sonar        - POSTGRES_PASSWORD=sonar      volumes:        - ./postgres/postgresql:/var/lib/postgresql        - ./postgres/postgresql_data:/var/lib/postgresql/data    networks:    sonarnet:      driver: bridge    volumes:    sonarqube_conf:    sonarqube_data:    sonarqube_extensions:    sonarqube_bundled-plugins:    postgresql:    postgresql_data:

使用docker-compose啟動

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

默認會吧插件掛載進容器內部。

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

默認規則配置

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

以admin帳號登陸

img

打開 品質配置profiles頁,點擊右上方的創建按鈕,創建 p3c profiles

img

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

img

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

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

img

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

img

img

img

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

img

配置阿里P3C已經完成。

Maven程式碼檢查

sonarqube可以使用多種方式進行程式碼上傳檢查。
我們使用簡單的Maven觸發程式碼檢查。

添加插件

在項目pom文件里添加sonar-maven-plugin插件。

<build>      <plugins>            <plugin>              <groupId>org.sonarsource.scanner.maven</groupId>              <artifactId>sonar-maven-plugin</artifactId>              <version>3.6.0.1398</version>          </plugin>        </plugins>  </build>

伺服器相關配置:

需要將<sonar.host.url>修改為之前搭建的sonarqube服務地址。

<!-- SonarQube程式碼品質檢測 -->  <profiles>        <profile>          <id>sonar</id>          <activation>              <activeByDefault>true</activeByDefault>              </activation>              <properties>              <sonar.host.url>http://127.0.0.1:9000/</sonar.host.url>          </properties>      </profile>    </profiles>

觸發檢查

pom配置完成,先將程式碼進行構建使用Maven package 命令。

完成構建執行mvn sonar:sonar命令,也可以使用idea maven 可視化介面進行操作。

img

運行完成。

img

查看sonar報告

打開sonar服務頁面127.0.0.1:9000

img

可以看到上傳的項目列表,選擇項目查看分析結果,項目健康狀態等資訊。

img

問題里可以看到相關的程式碼問題列表,打開單個則查看詳情。

img

總結

當然我們只是使用了簡單的Maven方式推送至SonarQube服務,當然也可以在ci引擎進行程式碼自動檢查,如: JenkinsGit,自動化檢查,有興趣的小夥伴也可以了解下其他功能,SonarQube官網

示例程式碼地址: sonarqube-start

作者GitHub:
Purgeyao 歡迎關注