搜尋
首頁後端開發php教程重新引入詹金斯:使用管道的自動測試

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
您如何防止與會議有關的跨站點腳本(XSS)攻擊?您如何防止與會議有關的跨站點腳本(XSS)攻擊?Apr 23, 2025 am 12:16 AM

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

您如何優化PHP會話性能?您如何優化PHP會話性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

什麼是session.gc_maxlifetime配置設置?什麼是session.gc_maxlifetime配置設置?Apr 23, 2025 am 12:10 AM

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

您如何在PHP中配置會話名?您如何在PHP中配置會話名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。

您應該多久再生一次會話ID?您應該多久再生一次會話ID?Apr 23, 2025 am 12:03 AM

會話ID應在登錄時、敏感操作前和每30分鐘定期重新生成。 1.登錄時重新生成會話ID可防會話固定攻擊。 2.敏感操作前重新生成提高安全性。 3.定期重新生成降低長期利用風險,但需權衡用戶體驗。

如何在PHP中設置會話cookie參數?如何在PHP中設置會話cookie參數?Apr 22, 2025 pm 05:33 PM

在PHP中設置會話cookie參數可以通過session_set_cookie_params()函數實現。 1)使用該函數設置參數,如過期時間、路徑、域名、安全標誌等;2)調用session_start()使參數生效;3)根據需求動態調整參數,如用戶登錄狀態;4)注意設置secure和httponly標誌以提升安全性。

在PHP中使用會議的主要目的是什麼?在PHP中使用會議的主要目的是什麼?Apr 22, 2025 pm 05:25 PM

在PHP中使用會話的主要目的是維護用戶在不同頁面之間的狀態。 1)會話通過session_start()函數啟動,創建唯一會話ID並存儲在用戶cookie中。 2)會話數據保存在服務器上,允許在不同請求間傳遞數據,如登錄狀態和購物車內容。

您如何在子域中分享會議?您如何在子域中分享會議?Apr 22, 2025 pm 05:21 PM

如何在子域名間共享會話?通過設置通用域名的會話cookie實現。 1.在服務器端設置會話cookie的域為.example.com。 2.選擇合適的會話存儲方式,如內存、數據庫或分佈式緩存。 3.通過cookie傳遞會話ID,服務器根據ID檢索和更新會話數據。

See all articles

熱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

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

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

記事本++7.3.1

記事本++7.3.1

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。