Jenkins:PHP項目的持續集成與交付利器
Jenkins,這款開源自動化服務器,在PHP項目的持續集成和持續交付中扮演著關鍵角色,它能夠實時檢測和解決bug,並持續反饋代碼質量改進建議。
Jenkins與PHP工具集成的強大功能
Jenkins與眾多PHP項目工具兼容,包括PHP CodeSniffer、PHP MD、PHP CPD、PHP Depend、PHPLOC、PHPUnit和PHPDox等,每個工具都提供獨特的代碼分析見解和指標。 Jenkins的優勢在於它能夠生成圖表和概覽,比命令行檢索更有效地呈現問題,從而更輕鬆地識別和解決代碼中的問題。
除了已設置的工具外,Jenkins還會收集其他信息,例如PHP CodeSniffer、PHP MD和PHP CPD違規情況的概述,以及顯示每次構建之間所有提交的“更改”概述。
Jenkins結果解讀:項目視圖和構建視圖
Jenkins的結果來自不同的工具,並將放置在Jenkins GUI的不同位置。我們將瀏覽兩個不同的頁面。首先是項目視圖頁面,其頂部顯示項目名稱。在此頁面上,您可以獲得項目的總體概述,並可以輕鬆比較多個構建。您可以通過從默認概述頁面單擊項目來訪問此頁面。除了項目視圖頁面外,我們還有構建視圖頁面。您可以通過單擊側邊欄中的構建編號來導航到此頁面。在這裡,您可以查看有關此特定構建的各種詳細信息。
本文將逐步介紹每個工具及其報告內容。最後,我們還將查看Jenkins為我們收集的一些額外詳細信息。由於我們多次構建相同的項目,因此我們的圖表中將顯示直線。在實際項目中,圖表會波動。
PHP CodeSniffer
CodeSniffer是一個工具,用於檢查您的代碼是否符合通用規則集或您自己的自定義規則集。在本例中,我們配置了希望根據PSR2測試我們的工具。我們在build.xml文件中定義了這一點。
<arg value="--standard=PSR2" />
在概述頁面上,您將看到一個名為“Checkstyle Trend”的圖表。此圖表表示每次構建中PSR2問題的數量。在我們的代碼中,我們幾乎完全符合PSR2標準,因此我們的圖表只顯示一個問題。
頁面下方還有一個圖表,它結合了來自3個工具的數據。 CodeSniffer是其中之一。
要查看問題所在位置,您可以單擊最新構建的左側菜單中的“checkstyle warnings”,或者單擊特定構建,然後單擊該特定構建的“checkstyle warnings”。
在此頁面上,您可以清楚地看到問題的描述。請注意,您可以使用多個過濾器。在頂部欄中,您可以清楚地看到有多少問題是新的,有多少問題已修復。您可以單擊數字以清楚地查看更改。在摘要中,您可以快速查看按優先級分類的問題。
PHP MD
MD代表Mess Detector(混亂檢測器)。此工具嘗試指示代碼中的幾個問題。這可能是潛在的錯誤、未使用的代碼或複雜的方法。有關可用檢查的完整列表,您可以查看此頁面。請注意,我們並非檢查每個規則。您可以在phpmd.xml文件中定義要檢查的規則。
與PHP CodeSniffer一樣,我們在項目視圖頁面上看到一個圖表,該圖表指示我們的混亂檢測如何隨著時間的推移而進展。
要找出問題所在,您可以單擊左側菜單中的“pmd warnings”以轉到最新構建。如果您希望查看不同的構建,請單擊一個構建,然後選擇“pmd warnings”。您將到達一個類似於PHP CodeSniffer頁面的頁面。
在頂部,您可以再次看到有多少問題是新的,有多少問題已修復。除此之外,您還可以看到每個問題的優先級。
在詳細信息頁面中,您可以獲得有關在何處找到問題的更多信息。有許多選項卡可用於以不同的方式提供相同的信息。例如,您可以單擊“types”以了解有關每種類型的更多信息。
如您所見,“UnusedFormalParameter”是我們最大的問題。通過單擊它,我們將再次看到哪些文件有未使用的參數。
PHP CPD
CPD代表Copy Paste Detector(複製粘貼檢測器)。此工具將分析所有代碼並查找多個重複行。如果您有很多重複行,則可能意味著您應該重寫某些部分,以便在多個類之間共享邏輯。在項目視圖頁面上,我們將再次看到所有構建中的總體進度。
在左側菜單中,我們可以單擊“duplicate code”以獲取所發現問題的概述。與之前一樣,單擊構建以獲取有關該構建的更多信息。您會注意到概述看起來與之前的頁麵類似。讓我們單擊“details”選項卡以獲取更多信息。
如您所見,CompanyFilter類中有58行也位於UserFilter和TimeCategoryFilter類中。根據此數據,您可以決定需要某種處理所有3個類的大部分內容的BaseFilter或實現服務。解決方案取決於您的情況,PHP CPD 只告訴您它在哪裡發現了問題。
PHP Depend
PHP Depend可能是最難理解的指標。 PHP Depend對您的代碼庫執行靜態代碼分析。它生成2個圖像和一個概述頁面。您可能注意到,在項目視圖頁面的頂部,有一些HTML應該顯示圖像。
圖像未顯示的事實意味著您必須切換Jenkins配置中的開關。轉到“manage jenkins”,然後轉到“Configure Global Security”。有一個選擇框,您可以使用它來配置“markup formatter”。將其設置為“Safe HTML”並保存您的設置。如果您現在返回到項目視圖頁面,您會注意到HTML已轉換為兩個圖像。
我建議您閱讀此工具的官方文檔以充分理解這兩個圖表。有關金字塔的更多信息,您可以查看此鏈接。有關抽像不穩定性圖表的更多信息,您可以查看此鏈接。
您可以通過單擊特定構建,然後在左側菜單中選擇“JDepend”來獲取更多詳細信息。您將獲得如下概述。
此頁面的解釋也相當龐大而復雜,因此我將您引導至官方文檔,其中對所有內容進行了解釋。
PHPLOC
PHPLOC是一個快速測量項目大小的工具。它向您顯示代碼的總行數、靜態方法的總數等。在左側菜單中,您可以單擊“plots”以獲取此工具的結果。您可以使用11個圖表來查找此信息。下面,您將看到一個圖表的屏幕截圖,該圖表指示代碼和註釋的總行數以及方法、類、特性和函數的總數。
PHPUnit
Jenkins 中的大量統計數據是由 PHPUnit 生成的。僅在概述中,您將看到由 PHPUnit 數據生成的 3 個圖表。
第一個圖表指示有多少代碼被測試覆蓋。在本例中,為 71.1%。為了生成此覆蓋率,後台使用了 xdebug。
第二個圖表指示您的 CRAP 水平。 CRAP 代表更改風險分析和預測。通過檢查代碼的複雜性以及對代碼執行的測試量來計算 CRAP。如果您瀏覽了 PHP MD 規則,您可能已經註意到 PHP MD 也能夠檢查代碼的複雜性,但沒有考慮單元測試。請閱讀此處以了解 PHP MD 如何計算您的複雜性。
最後的圖表顯示了有多少測試成功以及有多少測試失敗。在本例中,它們都成功了。
在我們的左側欄菜單中,我們有兩個由 PHPUnit 生成的項目。第一個是 Crap。在此頁面上,您可以看到幾個圖表的概述,這些圖表指示您當前的 CRAP 水平有多高。在底部,您實際上會看到哪些方法被標記為 CRAP。您會注意到一列指示覆蓋率和復雜性。
第二個菜單項是“clover HTML report”。在此頁面中,您可以按目錄概述有多少內容被您的單元測試覆蓋。
您可以單擊目錄以深入了解您的源代碼。如果您到達一個文件,您可以打開該文件並逐行查看有多少內容被覆蓋。使用顏色,它指示哪些部分正在測試,哪些部分沒有測試。將鼠標懸停在一行上會指示您的單元測試已調用該行多少次。
在本例中,我們可以清楚地看到 if 語句中的部分沒有被單元測試調用。在本例中這是正確的。此方法只執行 GET 請求,而不執行 POST 請求。如果我們在單元測試中實現 POST 請求,則此 if 語句將被標記為綠色。這樣,您可以輕鬆發現單元測試中任何缺失的部分。
PHPDox
有很多工具可以根據您的代碼和註釋生成文檔。 PHPDox 只是另一個可以為您執行此任務的工具。在左側菜單中,您可以單擊“API Documentation”以轉到您的文檔。 PHPDox 的好處是它還包括所有其他工具的結果。
通過頂部的導航,您可以獲得所有類的概述,但您也可以深入研究一個類並獲得所有方法和描述的概述。您還可以查看文件的歷史記錄和源代碼。
其他頁面
除了我們在之前的文章中設置的工具外,Jenkins還會為您收集其他信息。我們安裝的違規插件會創建一個額外的頁面,該頁面顯示PHP CodeSniffer、PHP MD和PHP CPD的概述。
您還可以單擊特定構建,並在左側菜單中找到名為“changes”的菜單項。如果您轉到此頁面,您將看到在先前構建和此構建之間進行的所有提交的概述。如果未進行任何更改,則頁面將為空白。
結論
在本文中,我們仔細研究了從所有工具獲得的指標類型。您檢索到的所有信息也可以在命令行上檢索。 Jenkins 的優勢在於您可以創建圖表和概述,這些圖表和概述可以更好地表示問題。
在最後一部分中,我們將更換一些工具並添加一些額外的指標。我們還將研究如何分析我們的 CSS、JavaScript 和 HTML 代碼。
(此處省略FAQ部分,因為FAQ部分內容與文章主體內容重複性較高,且篇幅較長,為了避免重複,此處予以省略。)
以上是與Jenkins分析PHP項目的詳細內容。更多資訊請關注PHP中文網其他相關文章!