首頁 後端開發 php教程 與Jenkins分析PHP項目

與Jenkins分析PHP項目

Feb 19, 2025 am 11:41 AM

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標準,因此我們的圖表只顯示一個問題。

Analyzing a PHP Project with Jenkins

頁面下方還有一個圖表,它結合了來自3個工具的數據。 CodeSniffer是其中之一。

要查看問題所在位置,您可以單擊最新構建的左側菜單中的“checkstyle warnings”,或者單擊特定構建,然後單擊該特定構建的“checkstyle warnings”。

Analyzing a PHP Project with Jenkins

在此頁面上,您可以清楚地看到問題的描述。請注意,您可以使用多個過濾器。在頂部欄中,您可以清楚地看到有多少問題是新的,有多少問題已修復。您可以單擊數字以清楚地查看更改。在摘要中,您可以快速查看按優先級分類的問題。

PHP MD

MD代表Mess Detector(混亂檢測器)。此工具嘗試指示代碼中的幾個問題。這可能是潛在的錯誤、未使用的代碼或複雜的方法。有關可用檢查的完整列表,您可以查看此頁面。請注意,我們並非檢查每個規則。您可以在phpmd.xml文件中定義要檢查的規則。

與PHP CodeSniffer一樣,我們在項目視圖頁面上看到一個圖表,該圖表指示我們的混亂檢測如何隨著時間的推移而進展。

Analyzing a PHP Project with Jenkins

要找出問題所在,您可以單擊左側菜單中的“pmd warnings”以轉到最新構建。如果您希望查看不同的構建,請單擊一個構建,然後選擇“pmd warnings”。您將到達一個類似於PHP CodeSniffer頁面的頁面。

Analyzing a PHP Project with Jenkins

在頂部,您可以再次看到有多少問題是新的,有多少問題已修復。除此之外,您還可以看到每個問題的優先級。

在詳細信息頁面中,您可以獲得有關在何處找到問題的更多信息。有許多選項卡可用於以不同的方式提供相同的信息。例如,您可以單擊“types”以了解有關每種類型的更多信息。

Analyzing a PHP Project with Jenkins

如您所見,“UnusedFormalParameter”是我們最大的問題。通過單擊它,我們將再次看到哪些文件有未使用的參數。

PHP CPD

CPD代表Copy Paste Detector(複製粘貼檢測器)。此工具將分析所有代碼並查找多個重複行。如果您有很多重複行,則可能意味著您應該重寫某些部分,以便在多個類之間共享邏輯。在項目視圖頁面上,我們將再次看到所有構建中的總體進度。

Analyzing a PHP Project with Jenkins

在左側菜單中,我們可以單擊“duplicate code”以獲取所發現問題的概述。與之前一樣,單擊構建以獲取有關該構建的更多信息。您會注意到概述看起來與之前的頁麵類似。讓我們單擊“details”選項卡以獲取更多信息。

Analyzing a PHP Project with Jenkins

如您所見,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已轉換為兩個圖像。

Analyzing a PHP Project with Jenkins

我建議您閱讀此工具的官方文檔以充分理解這兩個圖表。有關金字塔的更多信息,您可以查看此鏈接。有關抽像不穩定性圖表的更多信息,您可以查看此鏈接。

您可以通過單擊特定構建,然後在左側菜單中選擇“JDepend”來獲取更多詳細信息。您將獲得如下概述。

Analyzing a PHP Project with Jenkins

此頁面的解釋也相當龐大而復雜,因此我將您引導至官方文檔,其中對所有內容進行了解釋。

PHPLOC

PHPLOC是一個快速測量項目大小的工具。它向您顯示代碼的總行數、靜態方法的總數等。在左側菜單中,您可以單擊“plots”以獲取此工具的結果。您可以使用11個圖表來查找此信息。下面,您將看到一個圖表的屏幕截圖,該圖表指示代碼和註釋的總行數以及方法、類、特性和函數的總數。

Analyzing a PHP Project with Jenkins

Analyzing a PHP Project with Jenkins

PHPUnit

Jenkins 中的大量統計數據是由 PHPUnit 生成的。僅在概述中,您將看到由 PHPUnit 數據生成的 3 個圖表。

Analyzing a PHP Project with Jenkins

第一個圖表指示有多少代碼被測試覆蓋。在本例中,為 71.1%。為了生成此覆蓋率,後台使用了 xdebug。

第二個圖表指示您的 CRAP 水平。 CRAP 代表更改風險分析和預測。通過檢查代碼的複雜性以及對代碼執行的測試量來計算 CRAP。如果您瀏覽了 PHP MD 規則,您可能已經註意到 PHP MD 也能夠檢查代碼的複雜性,但沒有考慮單元測試。請閱讀此處以了解 PHP MD 如何計算您的複雜性。

最後的圖表顯示了有多少測試成功以及有多少測試失敗。在本例中,它們都成功了。

在我們的左側欄菜單中,我們有兩個由 PHPUnit 生成的項目。第一個是 Crap。在此頁面上,您可以看到幾個圖表的概述,這些圖表指示您當前的 CRAP 水平有多高。在底部,您實際上會看到哪些方法被標記為 CRAP。您會注意到一列指示覆蓋率和復雜性。

第二個菜單項是“clover HTML report”。在此頁面中,您可以按目錄概述有多少內容被您的單元測試覆蓋。

Analyzing a PHP Project with Jenkins

您可以單擊目錄以深入了解您的源代碼。如果您到達一個文件,您可以打開該文件並逐行查看有多少內容被覆蓋。使用顏色,它指示哪些部分正在測試,哪些部分沒有測試。將鼠標懸停在一行上會指示您的單元測試已調用該行多少次。

Analyzing a PHP Project with Jenkins

在本例中,我們可以清楚地看到 if 語句中的部分沒有被單元測試調用。在本例中這是正確的。此方法只執行 GET 請求,而不執行 POST 請求。如果我們在單元測試中實現 POST 請求,則此 if 語句將被標記為綠色。這樣,您可以輕鬆發現單元測試中任何缺失的部分。

PHPDox

有很多工具可以根據您的代碼和註釋生成文檔。 PHPDox 只是另一個可以為您執行此任務的工具。在左側菜單中,您可以單擊“API Documentation”以轉到您的文檔。 PHPDox 的好處是它還包括所有其他工具的結果。

Analyzing a PHP Project with Jenkins

通過頂部的導航,您可以獲得所有類的概述,但您也可以深入研究一個類並獲得所有方法和描述的概述。您還可以查看文件的歷史記錄和源代碼。

Analyzing a PHP Project with Jenkins

其他頁面

除了我們在之前的文章中設置的工具外,Jenkins還會為您收集其他信息。我們安裝的違規插件會創建一個額外的頁面,該頁面顯示PHP CodeSniffer、PHP MD和PHP CPD的概述。

您還可以單擊特定構建,並在左側菜單中找到名為“changes”的菜單項。如果您轉到此頁面,您將看到在先前構建和此構建之間進行的所有提交的概述。如果未進行任何更改,則頁面將為空白。

Analyzing a PHP Project with Jenkins

結論

在本文中,我們仔細研究了從所有工具獲得的指標類型。您檢索到的所有信息也可以在命令行上檢索。 Jenkins 的優勢在於您可以創建圖表和概述,這些圖表和概述可以更好地表示問題。

在最後一部分中,我們將更換一些工具並添加一些額外的指標。我們還將研究如何分析我們的 CSS、JavaScript 和 HTML 代碼。

(此處省略FAQ部分,因為FAQ部分內容與文章主體內容重複性較高,且篇幅較長,為了避免重複,此處予以省略。)

以上是與Jenkins分析PHP項目的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

PHP 8.1中的枚舉(枚舉)是什麼? PHP 8.1中的枚舉(枚舉)是什麼? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是REST API設計原理? 什麼是REST API設計原理? Apr 04, 2025 am 12:01 AM

RESTAPI設計原則包括資源定義、URI設計、HTTP方法使用、狀態碼使用、版本控制和HATEOAS。 1.資源應使用名詞表示並保持層次結構。 2.HTTP方法應符合其語義,如GET用於獲取資源。 3.狀態碼應正確使用,如404表示資源不存在。 4.版本控制可通過URI或頭部實現。 5.HATEOAS通過響應中的鏈接引導客戶端操作。

您如何在PHP中有效處理異常(嘗試,捕捉,最後,投擲)? 您如何在PHP中有效處理異常(嘗試,捕捉,最後,投擲)? Apr 05, 2025 am 12:03 AM

在PHP中,異常處理通過try,catch,finally,和throw關鍵字實現。 1)try塊包圍可能拋出異常的代碼;2)catch塊處理異常;3)finally塊確保代碼始終執行;4)throw用於手動拋出異常。這些機制幫助提升代碼的健壯性和可維護性。

PHP中的匿名類是什麼?您何時可以使用它們? PHP中的匿名類是什麼?您何時可以使用它們? Apr 04, 2025 am 12:02 AM

匿名類在PHP中的主要作用是創建一次性使用的對象。 1.匿名類允許在代碼中直接定義沒有名字的類,適用於臨時需求。 2.它們可以繼承類或實現接口,增加靈活性。 3.使用時需注意性能和代碼可讀性,避免重複定義相同的匿名類。

See all articles