天天看點

Windows+SonarQube+Jenkins+Git+SonarPython配置持續內建的代碼品質平台Windows+Sonar+Jenkins+Git+SonarPython配置持續內建的代碼品質平台1.1 Java中主流代碼分析工具對比1.3 SonarQube整體架構:2.1 部署SonarQube2.2 部署SonarQube Scanner2.3 部署Jenkins2.4 本文省略但必須做的步驟:2.5 将Git項目添加到Jenkins并自動完成代碼檢測3.1 性能分析:4.1 引用:

Windows+Sonar+Jenkins+Git+SonarPython配置持續內建的代碼品質平台

本文以Python項目為例,建構了一個基于Windows+Sonar+Jenkins+Git的持續內建且支援代碼自動分析的平台

1.1 Java中主流代碼分析工具對比

@ PMD Findbugs CheckStyle Sonar
運作方式 IDE插件,獨立運作 IDE插件,獨立運作,Findbugs+Jenkins CI內建運作 IDE插件 獨立運作,需要單獨的MySQL源
運作原理 基于源代碼分析,主要面向安全編碼規則,如“避免聲明同名變量”,包括風格類、類型使用等等,具備一定的資料流分析和路徑分析能力。 基于位元組碼分析,大量使用資料流分析技術,側重運作時錯誤檢測,如空指針引用等,分析深度大于PMD及Checkstyle。 基于源代碼,與pmd類似,但更側重編碼的文法風格,分析深度不及PMD。 定位是代碼品質平台,本身不進行代碼分析,但可以內建各個靜态分析工具以及其他軟體開發測試工具,并基于內建工具的結果資料按照一定的品質模型,如iso-9126,對軟體的品質進行評估。
目的 檢查Java源檔案中的潛在問題 基于Bug Patterns概念,查找javabytecode(.class檔案)中的潛在bug 檢查Java源檔案是否與代碼規範相符 作為代碼品質平台,通過內建工具對軟體品質進行評估
檢查項 空try/catch/finally/switch語句塊,未使用的局部變量、參數和private方法,空if/while語句,過于複雜的表達式,不必要的if語句等,複雜類 主要檢查bytecode中的bug patterns,如NullPoint空指針檢查、沒有合理關閉資源、字元串相同判斷錯(==,而不是equals)等 Javadoc注釋命名規範多餘沒用的ImportsSize度量,如過長的方法缺少必要的空格Whitespace重複代碼 在其他代碼品質工具的基礎上,sonar不僅關注了正常靜态bug,還關注到了如代碼品質、包與包,類與類之間的依賴情況、代碼耦合情況、類,方法。檔案的複雜度、代碼中是否包含大量複制粘貼的代碼是品質低下的,關注到了項目代碼整體的健康情況。
優點 插件可以配置規則,有獨立顯示問題的視圖 規則嚴格,但可以通過修改規則集定義需要的規則 FindBugs 大多數提示是有用且值得更改的 提供圖形界面的獨立程式,對jar進行檢測,有報告生成,非常友善 規則嚴格,但可以通過修改規則集定義需要的規則 High級别的bug都是較為實用的bug,且能覆寫到一些性能方面的問題
缺點 配置無查找功能,但可以通過縮寫快速找到某個規則 很多功能插件沒有實作,可獨立使用,但無法同時修改源碼 隻能做檢查,不能修改代碼,可配合Jalopy使用修改代碼 插件自定義規則沒有查找功能,查找規則麻煩 其本身規則的實用程度不如Findbugs

1.2 SonarQube介紹

與持續內建工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是簡單地把不同的代碼檢查工具結果(例如 FindBugs,PMD 等)直接顯示在 Web 頁面上,而是通過不同的插件對這些結果進行再加工處理,通過量化的方式度量代碼品質的變化,進而可以友善地對不同規模和種類的工程進行代碼品質管理。

在對其他工具的支援方面,Sonar 不僅提供了對 IDE 的支援,可以在 Eclipse 和 IntelliJ IDEA 這些工具裡聯機檢視結果;同時 Sonar 還對大量的持續內建工具提供了接口支援,可以很友善地在持續內建中使用 Sonar。此外,Sonar 的插件還可以對 Java 以外的其他程式設計語言提供支援,對國際化以及報告文檔化也有良好的支援。

Sonar 為代碼的品質管理提供了一個平台,對傳統的代碼靜态檢測如 PMD、FindBugs 等工具進行整合,可以說是目前最強大的代碼品質管理工具之一。

Sonar 目前支援的語言:C/C++/JavaScript/C#/Java/COBOL/PL/SQL/PL/I/PHP/ABAP/VB.NET/VB6/Python/RPG/Flex/Objective-C/Swift/Web/XML

1.3 SonarQube整體架構:

Windows+SonarQube+Jenkins+Git+SonarPython配置持續內建的代碼品質平台Windows+Sonar+Jenkins+Git+SonarPython配置持續內建的代碼品質平台1.1 Java中主流代碼分析工具對比1.3 SonarQube整體架構:2.1 部署SonarQube2.2 部署SonarQube Scanner2.3 部署Jenkins2.4 本文省略但必須做的步驟:2.5 将Git項目添加到Jenkins并自動完成代碼檢測3.1 性能分析:4.1 引用:

2.1 部署SonarQube

  1. 下載下傳SonarQube
  2. 将SonarQube壓縮包解壓縮,執行/bin/windows-x86-64/StartSonar.bat 即完成了Sonar的啟動
  3. 打開浏覽器,登入http://localhost:9000
  4. 安裝SonarPython插件
  5. [可選安裝]安裝Chinese Pack差價可以獲得中文支援
插件的安裝方法:
  1. 點選右上角的Login
  2. 鍵入預設管理者使用者名及密碼 admin ,登陸
  3. 點選Administration,找到System->Update Center
  4. 搜尋插件名字,點選install,然後點選Restart重新開機Sonar,完成安裝。解除安裝同理

2.2 部署SonarQube Scanner

  1. 将 SonarQube Scanner 壓縮包解壓到位置(如C:\sonar-scanner),将bin目錄添加到環境變量中(C:\sonar-scanner\bin)
  2. (測試)打開CMD,cd到項目根目錄,鍵入

官方文檔有一個坑,就是并沒有定義projectName及projectVersion,實際測試中是必須定義的

其中-D 用來定義變量,加入-X 可以加入更多debug資訊

若沒有出錯,說明部署成功,打開浏覽器進入Dashboard,可以看到剛建立的項目代碼分析結果。

2.3 部署Jenkins

Jenkins是一個開源軟體項目,是基于Java開發的一種持續內建工具,用于監控持續重複的工作,旨在提供一個開放易用的軟體平台,使軟體的持續內建變成可能。
  1. 下載下傳Jenkins,選擇Windows
  2. 運作Jenkins安裝檔案,安裝完成後會跳出部署設定(預設位址:http://127.0.0.1:8080)
  3. 第一次會要求鍵入一個admin密碼,這個密碼存在Jenkins\secrets\initialAdminPassword 這個檔案中,用記事本打開,複制密碼粘貼到浏覽器中即可,同樣的,日後如果忘記管理者密碼,也可以找到這個檔案使用這個密碼登入管理者賬戶。
  4. 安裝 SonarQube Scanner for Jenkins 插件
  5. 進入 系統管理->Global Tool Configuration ,新增SonarQube Scannner,不勾選自動安裝

    Name鍵入SonarQube Scanner

    SONAR_RUNNER_HOME鍵入SonarQube的絕對目錄(如C:\sonar-scanner)

  6. 點選Save儲存

    Jenkins插件安裝方法

    進入 系統管理->插件管理->可選插件,在搜尋框中搜尋需要安裝的插件,點選直接安裝,然後重新開機Jenkins

2.4 本文省略但必須做的步驟:

  • 安裝Git

2.5 将Git項目添加到Jenkins并自動完成代碼檢測

  1. 打開Jenkins控制台->建立項目->選擇 建構一個自由風格的軟體項目 ->輸入項目名,下一步
  2. 源碼管理選擇Git

    Repository URL鍵入項目Git位址 如 https://github.com/HiddenStrawberry/JDPackage.git

    Credentials 為認證方式,點選Add添加認證, 這裡可以選擇多種認證方式,本文選擇Github使用者名/密碼登入,是以選擇Username with Password,填入Github的Username及Password,點選Add,然後選擇剛添加的賬戶。

  3. 點選下方建構->建立建構步驟-> Execute SonarQube Scanner
  4. SonarQube Scanner選擇SonarQube Scanner

    Analysis properties鍵入如下内容:

sonar.projectKey=myjdp 
   sonar.projectName=myjdp
   sonar.projectVersion=
   sonar.sources=.
           
注意中間沒有逗号,key,name,version為自定義,其他選項留白(本例),點選儲存
           

5. 在控制台中找到項目,點選立即建構,若建構後狀态燈為藍色,即為建構成功,若為紅色,進入Build History建構失敗的#次數,找到左邊的Console Output,即可檢視控制台中輸出的錯誤原因。

6. 在控制台中找到項目,點選SonarQube,即可檢視代碼分析内容。

3.1 性能分析:

在2G/雙核E5 V3 2.4GHz 新配置環境主機 上運作上述64位服務,實體記憶體占用約為80%,在運作建構時,CPU占用峰值可達80%,記憶體占用峰值達90%,由此可見SonarQube在代碼分析時占用資源較大。

4.1 引用:

如何靜态測試 Java 代碼?

Findbugs使用

PMD使用

Eclipse靜态分析插件使用

PMD、FindBug、checkstyle、sonar這些代碼檢查工具的差別?各自的側重點是什麼?

FindBugs、PMD和CheckStyle對比

建構基于Jenkins + Github的持續內建環境

SonarPython - Plugins - Doc SonarQube