目錄
安裝Jenkins
創建第一個作業
Jenkinsfile
多分支Pipeline項目
更進一步
總結
Jenkins使用Pipeline進行自動化測試的常見問題解答
使用Jenkins進行自動化測試的好處是什麼?
如何為PHP測試設置Jenkins?
Jenkins如何與PHPUnit一起進行測試?
使用PHPUnit的Jenkins PHP應用程序的正確工作流程是什麼?
如何在Jenkins中解析PHPUnit和JUnit結果?
首頁 後端開發 php教程 重新引入詹金斯:使用管道的自動測試

重新引入詹金斯:使用管道的自動測試

Feb 10, 2025 pm 03:01 PM

Re-Introducing Jenkins: Automated Testing with Pipelines

核心要點

  • Jenkins是一款流行的開源構建服務器,支持對複雜應用程序進行自動化測試,通過在部署前發現和解決錯誤來加快發布流程。
  • Jenkins Pipeline(在2.0版本中引入)是一組用Groovy腳本語言編寫的可定制步驟,用於測試和構建代碼。如果一個步驟失敗,整個構建都會失敗,Jenkins將停止執行。
  • Jenkins可以使用Laravel Homestead輕鬆安裝和配置。設置完成後,可以創建一個新的構建作業來檢出項目的最新版本,安裝依賴項並運行單元測試。
  • Jenkins Pipeline可以作為Jenkinsfile腳本寫在代碼庫的根目錄中,從而實現版本控制。還可以設置多分支Pipeline作業,以便對項目的不同分支運行不同的操作。
  • Jenkins支持廣泛的插件生態系統,可以安裝和配置這些插件來擴展其功能,包括測試插件和與雲服務的集成。可以將其配置為在每次將提交推送到存儲庫時自動構建,並且應該正確地進行安全保護。

隨著應用程序變得越來越複雜——包含Composer依賴項、Webpack構建腳本和每個環境變量——我們不可避免地會達到這樣一個點:測試所有這些不同的複雜性變得緩慢而費力,尤其是在每次測試都需要拆除和重建整個環境時。同樣,代碼風格也可能隨著時間的推移而發生偏差,創建可用於生產的部署歸檔需要遵循一組特定的步驟。

假設要測試應用程序,需要執行以下步驟:

  1. 運行composer install以確保安裝了依賴項
  2. 對代碼庫中的每個PHP文件運行php -l以檢查語法錯誤
  3. 運行PHPUnit進行單元測試
  4. 運行Codeception進行功能測試

Re-Introducing Jenkins: Automated Testing with Pipelines

如果這些步驟中的任何一個失敗,則在解決錯誤之前,軟件應被認為不適合部署。隨著軟件變得越來越複雜,測試數量隨著時間的推移而增加,運行完整的測試套件可能需要幾分鐘的時間,這會減慢開發人員的速度,進而減慢發布流程。

為了克服這個問題,可以在開發工作流程中引入構建服務器。構建服務器運行一段軟件,使您可以反復運行一系列步驟,如果其中一個步驟失敗,構建服務器可以通知您問題。如果您參與過開源項目,您可能已經看到過TravisCI或CircleCI等構建服務器的實際應用。例如,Laravel項目的每個拉取請求都由TravisCI進行測試,以確保更改不會破壞任何測試,然後StyleCI確保代碼更改與項目代碼風格匹配。

Re-Introducing Jenkins: Automated Testing with Pipelines

Jenkins是一款流行的開源構建服務器,今年發布了2.0版本。此新版本的主要功能之一是將(以前可選的)Pipeline插件作為核心功能包含在內。

Pipeline是一組完全可定制的步驟,可以按順序運行以測試和構建代碼。 Pipeline是用Groovy腳本語言編寫的,它具有非常簡單的語法,易於上手。例如,如果要將前面描述的測試步驟描述為Pipeline,它可能看起來類似於這樣:

node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}
登入後複製
登入後複製
登入後複製
登入後複製

node語句告訴Jenkins分配一個單獨的構建節點(Jenkins可以以單服務器模式或多節點設置運行)。 node塊內有多個階段,每個階段執行特定操作。 Jenkins將依次運行每個階段,如果任何一個階段失敗,則整個構建將失敗,Jenkins將停止執行。

從這個簡單的示例中,可以輕鬆地添加其他測試的附加階段,告訴Jenkins發送成功或失敗構建的Slack通知,將成功測試的代碼推送到發布分支或將拉取請求標記為可以合併。

安裝Jenkins

Jenkins非常易於安裝,在本教程中,我們將使用Laravel Homestead提供一致的虛擬環境,以便您可以在本地使用Jenkins。

第一步是安裝Laravel Homestead——這裡有一個有用的指南。您只需要啟動和運行虛擬機,我們不需要在homestead.yaml文件中配置任何站點。

啟動並運行Homestead虛擬機後,使用vagrant ssh登錄到它。

Homestead附帶了我們所需的所有依賴項,即Git、PHP和Composer,因此我們只需要安裝Jenkins本身。按照Jenkins Debian軟件包指南,我們需要執行以下步驟。

運行wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -。此命令將代碼簽名密鑰添加到Aptitude,以便信任來自此存儲庫的Jenkins軟件包。

接下來,需要更新軟件包源列表,以便Aptitude知道Jenkins軟件包存儲庫。執行echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee -a /etc/apt/sources.list

最後,我們需要Aptitude更新其可用軟件包的緩存,然後安裝Jenkins:

node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}
登入後複製
登入後複製
登入後複製
登入後複製

安裝Jenkins大約需要五分鐘,因為它還有許多也需要安裝的依賴項。

安裝Jenkins後,在瀏覽器中打開http://192.168.10.10:8080(或您配置的虛擬主機URL,例如homestead.app),您應該會看到一個標題為“解鎖Jenkins”的頁面。

Re-Introducing Jenkins: Automated Testing with Pipelines

在虛擬機中,運行以下命令——sudo cat /var/lib/jenkins/secrets/initialAdminPassword,一個隨機的數字和字母字符串將打印到控制台。將該字符串複製並粘貼到瀏覽器中的文本字段中,然後按“繼續”。

Re-Introducing Jenkins: Automated Testing with Pipelines

您將看到兩個選項——選擇“安裝建議的插件”,然後等待幾分鐘,直到插件下載並安裝完成。

Re-Introducing Jenkins: Automated Testing with Pipelines

在下一個屏幕上,輸入管理員用戶的詳細信息,然後按“保存並完成”。

Re-Introducing Jenkins: Automated Testing with Pipelines

Jenkins現在已安裝並配置!

創建第一個作業

設置Jenkins後,我們將創建一個新的構建作業,該作業將執行以下操作:

  1. 檢出laravel/framework的最新版本
  2. 安裝Composer依賴項
  3. 運行PHPUnit

單擊儀表板上的“創建新作業”鏈接(或“新建項目”鏈接——它們都執行相同的操作)。

Re-Introducing Jenkins: Automated Testing with Pipelines

輸入名稱laravel,選擇“Pipeline”,然後按“確定”。

您現在將看到該作業的配置編輯器。向下滾動到Pipeline部分,然後輸入以下腳本:

sudo apt-get update && sudo apt-get install jenkins
登入後複製
登入後複製
登入後複製

按“保存”。您將被重定向到作業概述頁面,幾秒鐘後,您將看到作業啟動。如果它沒有啟動,只需單擊左側菜單中的“立即構建”鏈接。

Re-Introducing Jenkins: Automated Testing with Pipelines

當我們在Pipeline腳本中定義的每個階段開始和結束時,階段視圖將更新。

如果單擊某個階段,將出現一個覆蓋層,其中包含該階段的日誌輸出,這對於調試非常有用。或者,您可以單擊左側菜單中的作業,然後單擊“控制台”。

所有Jenkins作業都有自己的工作區,這是一個區域,您可以在其中安全地創建構建區域中可能需要的任何臨時文件。此作業的工作區位置可以在/var/lib/jenkins/workspace/laravel中找到。默認情況下,Jenkins不會為每次構建清除此工作區。如果需要這樣做,可以將一個階段添加到Pipeline腳本的開頭,如下所示:

node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}
登入後複製
登入後複製
登入後複製
登入後複製

Jenkinsfile

對於我們的第一個作業,我們在作業設置界面中編輯了Pipeline腳本。但是,將此腳本與我們的代碼一起保存在版本控制中會更有用。

使用Jenkins的Pipeline,您可以將Pipeline作為Jenkinsfile腳本寫在代碼存儲庫的根目錄中,它將被發現並運行。它的概念類似於您可能已經熟悉的.travis.yml.circleci.yml文件。

laravel/framework Github項目頁面上,單擊右上角的“fork”按鈕,然後單擊彈出窗口中的個人資料。

創建一個名為jenkinsfile的新分支,然後創建一個新文件(可以直接在Github中執行此操作,如果不需要,則不必克隆存儲庫)。

Re-Introducing Jenkins: Automated Testing with Pipelines

輸入以下腳本並提交文件:

sudo apt-get update && sudo apt-get install jenkins
登入後複製
登入後複製
登入後複製

現在返回Jenkins,然後單擊左側菜單中的“配置”按鈕。向下滾動到Pipeline部分,並將“定義”下拉菜單從Pipeline腳本更新為SCM。

Re-Introducing Jenkins: Automated Testing with Pipelines

輸入您已分叉的存儲庫的詳細信息,然後點擊“保存”。

Re-Introducing Jenkins: Automated Testing with Pipelines

在作業概述屏幕上,單擊左側菜單中的“立即構建”。您應該有一個成功的構建。

多分支Pipeline項目

大多數軟件項目使用存儲庫中的多個分支來定義項目的不同階段。例如:

  • master分支代表當前的生產版本
  • develop分支代表當前的暫存版本
  • feature/new-profile-page分支可能代表正在進行的功能

對於每個分支,您可能希望運行許多自定義操作——例如,每當master或develop分支有提交時,您都希望運行完整的單元和集成測試,而在所有其他分支上,只有單元測試就足夠了。

Jenkinsfile是用Groovy編程語言編寫的,這意味著我們有了一個完整的腳本語言可以使用。

在這個例子中,我添加了一個if語句來檢查分支名稱;如果它是master或develop,則Jenkins應該運行integration_tests階段。

之後,有一個switch語句,根據分支名稱,創建一個不同的部署歸檔並將其註冊到代碼部署服務(在這個例子中,我演示了這將如何與Amazon Web Service的CodeDeploy服務一起工作) 。

node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}
登入後複製
登入後複製
登入後複製
登入後複製

多分支Pipeline作業同樣易於設置——創建項目時,選擇“多分支Pipeline”作為類型:

Re-Introducing Jenkins: Automated Testing with Pipelines

然後,在配置屏幕中,將Pipeline定義下拉菜單設置為SCM中的Pipeline腳本,並輸入存儲庫詳細信息。

每當運行“分支索引”選項(它替換作業內的“立即構建”菜單項)時,Jenkins將遞歸迭代存儲庫中的每個分支,並且對於最近更改的每個具有Jenkinsfile的分支,將運行該分支的新構建。

更進一步

Jenkins的流行很大程度上歸功於其廣泛的插件生態系統。

在Jenkins主屏幕上,單擊左側菜單中的“管理Jenkins”,然後單擊“插件管理器”。

Re-Introducing Jenkins: Automated Testing with Pipelines

您可以安裝和配置數十個插件,從測試插件到與雲服務的集成。

例如,如果您的團隊使用Slack,您可以啟用Slack Notification插件。在主要的Jenkins設置屏幕(“管理Jenkins”->“配置系統”)中對其進行配置,然後可以將Slack消息作為Pipeline腳本的一部分發送:

sudo apt-get update && sudo apt-get install jenkins
登入後複製
登入後複製
登入後複製

在服務器上啟動並運行Jenkins後,可以輕鬆配置作業,以便在每次將提交推送到存儲庫時自動構建(或運行分支索引)。

對於Github項目,請確保已安裝並啟用了Github插件,然後在Github存儲庫設置中啟用與“Jenkins(Github插件)”服務的集成。

對於Bitbucket,這稍微複雜一些,我已經在我的博客上詳細介紹了所需步驟。

還應該確保Jenkins服務器已正確保護——可以在Jenkins中手動創建用戶,使用OAuth將身份驗證委託給Github或Bitbucket,或者將Jenkins連接到組織的LDAP目錄。同樣,應該始終通過SSL運行Jenkins,以便無法輕鬆攔截對Jenkins的訪問。

Jenkins安裝還附帶一個“代碼片段生成器”,它允許您查看所有啟用的Pipeline函數(例如,我們已經使用過的sh、slackSend、deleteDir()和scm)。您可以在作業概述屏幕的左側菜單中找到指向它的鏈接。

總結

Jenkins是一個非常強大的工具,可以幫助提高軟件的可靠性,並為您和您的團隊節省大量時間。人類非常不擅長一遍又一遍地執行重複性任務,但是,計算機擅長這一點。

如果您的團隊因運行時間超過五分鐘的測試而速度變慢,請將該測試卸載到Jenkins。

如果希望在新的生產或暫存版本可用時自動生成部署歸檔,Jenkins可以做到這一點。

如果希望密切關注代碼質量並在客戶發現之前發現回歸,那麼Jenkins隨時準備提供幫助。

請在下方留下任何問題或評論,並告訴我們您最具創意的Jenkins Pipeline!

如果您喜歡這篇文章,您可能還會發現以下內容有用:

  • Cypress測試:運行Web應用程序測試指南
  • 使用unittest和pytest介紹Python單元測試
  • 如何使用Jest測試React組件
  • 使用Puppeteer學習端到端測試
  • 三種免提持續測試方法

Jenkins使用Pipeline進行自動化測試的常見問題解答

使用Jenkins進行自動化測試的好處是什麼?

Jenkins是一個流行的開源工具,它為自動化測試提供了許多好處。首先,它提供了持續集成和持續交付(CI/CD),允許開發人員更頻繁地將更改集成到項目中。這導致及早發現潛在問題並減少修復時間。其次,Jenkins支持各種插件,使其高度可定制並適應不同的項目需求。第三,它提供實時測試結果和詳細報告,這有助於快速識別和解決問題。最後,Jenkins支持Pipeline,這是一組工具,允許通過Pipeline領域特定語言(DSL)將簡單到復雜的交付Pipeline“作為代碼”建模。

如何為PHP測試設置Jenkins?

為PHP測試設置Jenkins涉及幾個步驟。首先,需要在服務器上安裝Jenkins。安裝後,可以安裝PHP測試所需的插件,例如PHP插件、PHPUnit插件等。安裝插件後,可以創建一個新的Jenkins作業並為PHP項目配置它。這包括設置源代碼管理、構建觸發器和構建步驟。在構建步驟中,可以指定運行PHP測試的命令。配置完成後,可以運行作業,Jenkins將執行測試並提供詳細報告。

Jenkins如何與PHPUnit一起進行測試?

Jenkins通過在Jenkins作業中執行PHPUnit測試來與PHPUnit一起工作。可以在Jenkins作業的構建步驟中指定PHPUnit命令。運行作業時,Jenkins將執行PHPUnit測試並捕獲結果。然後在Jenkins儀表板中顯示結果,提供測試執行的詳細報告。這包括運行、通過、失敗和跳過的測試數量,以及代碼覆蓋率。

使用PHPUnit的Jenkins PHP應用程序的正確工作流程是什麼?

使用PHPUnit的Jenkins PHP應用程序的正確工作流程通常包括以下步驟:首先,從版本控制系統檢出源代碼。接下來,安裝任何依賴項,例如PHP項目的Composer。然後,運行PHPUnit測試。然後收集測試結果並在Jenkins儀表板中顯示。如果任何測試失敗,則構建標記為失敗。否則,構建標記為成功。可以使用Jenkins Pipeline自動化此工作流程,從而實現持續集成和交付。

如何在Jenkins中解析PHPUnit和JUnit結果?

可以使用JUnit插件在Jenkins中解析PHPUnit和JUnit結果。運行PHPUnit測試後,可以生成JUnit XML報告。然後,Jenkins中的JUnit插件可以解析此報告。在Jenkins作業的後構建操作中,可以添加“發布JUnit測試結果報告”操作並指定JUnit XML報告的位置。然後,Jenkins將解析報告並在儀表板中顯示結果。這包括運行、通過、失敗和跳過的測試數量,以及測試持續時間和趨勢。

以上是重新引入詹金斯:使用管道的自動測試的詳細內容。更多資訊請關注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)

熱門話題

Java教學
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1229
24
在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中有效處理異常(嘗試,捕捉,最後,投擲)? 您如何在PHP中有效處理異常(嘗試,捕捉,最後,投擲)? Apr 05, 2025 am 12:03 AM

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

說明PHP中的不同錯誤類型(注意,警告,致命錯誤,解析錯誤)。 說明PHP中的不同錯誤類型(注意,警告,致命錯誤,解析錯誤)。 Apr 08, 2025 am 12:03 AM

PHP中有四種主要錯誤類型:1.Notice:最輕微,不會中斷程序,如訪問未定義變量;2.Warning:比Notice嚴重,不會終止程序,如包含不存在文件;3.FatalError:最嚴重,會終止程序,如調用不存在函數;4.ParseError:語法錯誤,會阻止程序執行,如忘記添加結束標籤。

包括,require,incement_once,require_once之間有什麼區別? 包括,require,incement_once,require_once之間有什麼區別? Apr 05, 2025 am 12:07 AM

在PHP中,include,require,include_once,require_once的區別在於:1)include產生警告並繼續執行,2)require產生致命錯誤並停止執行,3)include_once和require_once防止重複包含。這些函數的選擇取決於文件的重要性和是否需要防止重複包含,合理使用可以提高代碼的可讀性和可維護性。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

什麼是HTTP請求方法(獲取,發布,放置,刪除等),何時應該使用? 什麼是HTTP請求方法(獲取,發布,放置,刪除等),何時應該使用? Apr 09, 2025 am 12:09 AM

HTTP請求方法包括GET、POST、PUT和DELETE,分別用於獲取、提交、更新和刪除資源。 1.GET方法用於獲取資源,適用於讀取操作。 2.POST方法用於提交數據,常用於創建新資源。 3.PUT方法用於更新資源,適用於完整更新。 4.DELETE方法用於刪除資源,適用於刪除操作。

See all articles