重新引入詹金斯:使用管道的自動測試
核心要點
- Jenkins是一款流行的開源構建服務器,支持對複雜應用程序進行自動化測試,通過在部署前發現和解決錯誤來加快發布流程。
- Jenkins Pipeline(在2.0版本中引入)是一組用Groovy腳本語言編寫的可定制步驟,用於測試和構建代碼。如果一個步驟失敗,整個構建都會失敗,Jenkins將停止執行。
- Jenkins可以使用Laravel Homestead輕鬆安裝和配置。設置完成後,可以創建一個新的構建作業來檢出項目的最新版本,安裝依賴項並運行單元測試。
- Jenkins Pipeline可以作為Jenkinsfile腳本寫在代碼庫的根目錄中,從而實現版本控制。還可以設置多分支Pipeline作業,以便對項目的不同分支運行不同的操作。
- Jenkins支持廣泛的插件生態系統,可以安裝和配置這些插件來擴展其功能,包括測試插件和與雲服務的集成。可以將其配置為在每次將提交推送到存儲庫時自動構建,並且應該正確地進行安全保護。
隨著應用程序變得越來越複雜——包含Composer依賴項、Webpack構建腳本和每個環境變量——我們不可避免地會達到這樣一個點:測試所有這些不同的複雜性變得緩慢而費力,尤其是在每次測試都需要拆除和重建整個環境時。同樣,代碼風格也可能隨著時間的推移而發生偏差,創建可用於生產的部署歸檔需要遵循一組特定的步驟。
假設要測試應用程序,需要執行以下步驟:
- 運行
composer install
以確保安裝了依賴項 - 對代碼庫中的每個PHP文件運行
php -l
以檢查語法錯誤 - 運行PHPUnit進行單元測試
- 運行Codeception進行功能測試
如果這些步驟中的任何一個失敗,則在解決錯誤之前,軟件應被認為不適合部署。隨著軟件變得越來越複雜,測試數量隨著時間的推移而增加,運行完整的測試套件可能需要幾分鐘的時間,這會減慢開發人員的速度,進而減慢發布流程。
為了克服這個問題,可以在開發工作流程中引入構建服務器。構建服務器運行一段軟件,使您可以反復運行一系列步驟,如果其中一個步驟失敗,構建服務器可以通知您問題。如果您參與過開源項目,您可能已經看到過TravisCI或CircleCI等構建服務器的實際應用。例如,Laravel項目的每個拉取請求都由TravisCI進行測試,以確保更改不會破壞任何測試,然後StyleCI確保代碼更改與項目代碼風格匹配。
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”的頁面。
在虛擬機中,運行以下命令——sudo cat /var/lib/jenkins/secrets/initialAdminPassword
,一個隨機的數字和字母字符串將打印到控制台。將該字符串複製並粘貼到瀏覽器中的文本字段中,然後按“繼續”。
您將看到兩個選項——選擇“安裝建議的插件”,然後等待幾分鐘,直到插件下載並安裝完成。
在下一個屏幕上,輸入管理員用戶的詳細信息,然後按“保存並完成”。
Jenkins現在已安裝並配置!
創建第一個作業
設置Jenkins後,我們將創建一個新的構建作業,該作業將執行以下操作:
- 檢出
laravel/framework
的最新版本 - 安裝Composer依賴項
- 運行PHPUnit
單擊儀表板上的“創建新作業”鏈接(或“新建項目”鏈接——它們都執行相同的操作)。
輸入名稱laravel
,選擇“Pipeline”,然後按“確定”。
您現在將看到該作業的配置編輯器。向下滾動到Pipeline部分,然後輸入以下腳本:
sudo apt-get update && sudo apt-get install jenkins
按“保存”。您將被重定向到作業概述頁面,幾秒鐘後,您將看到作業啟動。如果它沒有啟動,只需單擊左側菜單中的“立即構建”鏈接。
當我們在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中執行此操作,如果不需要,則不必克隆存儲庫)。
輸入以下腳本並提交文件:
sudo apt-get update && sudo apt-get install jenkins
現在返回Jenkins,然後單擊左側菜單中的“配置”按鈕。向下滾動到Pipeline部分,並將“定義”下拉菜單從Pipeline腳本更新為SCM。
輸入您已分叉的存儲庫的詳細信息,然後點擊“保存”。
在作業概述屏幕上,單擊左側菜單中的“立即構建”。您應該有一個成功的構建。
多分支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”作為類型:
然後,在配置屏幕中,將Pipeline定義下拉菜單設置為SCM中的Pipeline腳本,並輸入存儲庫詳細信息。
每當運行“分支索引”選項(它替換作業內的“立即構建”菜單項)時,Jenkins將遞歸迭代存儲庫中的每個分支,並且對於最近更改的每個具有Jenkinsfile的分支,將運行該分支的新構建。
更進一步
Jenkins的流行很大程度上歸功於其廣泛的插件生態系統。
在Jenkins主屏幕上,單擊左側菜單中的“管理Jenkins”,然後單擊“插件管理器”。
您可以安裝和配置數十個插件,從測試插件到與雲服務的集成。
例如,如果您的團隊使用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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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