零基礎學習如何構建CI/CD管道
譯文【51CTO.com快譯】對于CI/CD(持續集成/連續部署)管道的實現是如今構建DevOps模式的基礎。通過自動化應用程序的生成、測試與部署,它能夠彌合開發和運營團隊之間的差距。通過本文,您將了解到何為CI/CD管道、以及它的工作原理。
在討論CI/CD管道之前,讓我們先來理解一下DevOps。
DevOps是一種軟件開發的方法,它涉及到持續開發、持續測試、持續集成、持續部署、以及在整個開發的生命周期中對于軟件的持續監控。所有頂尖公司都通過采用該流程,實現了高質量軟件的開發、研發周期的縮短,以及客戶滿意度的提高,因此它非常適合于大多數公司的采納與跟進。
想學習DevOps,就需要先理解它的生命周期。我們下面來看看DevOps的生命周期,并探討一下它與各個軟件開發階段之間的關系。
CI代表了持續集成,而CD則代表著持續交付或持續部署。如上圖所示,您可以將其視為類似于軟件開發生命周期的一個過程。
讓我們具體來看看它是如何工作的。上述管道從邏輯的角度演示、說明了軟件是如何沿著其生命周期的每個階段向前移動,直至最終被交付給客戶或部署到生產環境中。
讓我們假設一個CI/CD的管道場景。例如:您要構建一個Web應用程序,并將它部署到在線的Web服務器上。那么您手頭應該有一組負責代碼編寫的開發團隊,他們將進一步去著手構建Web應用程序。
最初,開發團隊將軟件代碼提交到版本控制系統(如git或svn)。接下來,代碼進入構建階段,這是管道的第一個階段,開發人員將其代碼導入其中,進而在打上適當的版本標簽之后,再返回到版本控制系統。
假設我們手頭已有一些Java程序代碼,并且需要在執行之前進行構建。那么在經過了剛才的版本控制階段,代碼再次來到構建階段,并在此完成編譯。所謂構建階段,實際上就是您從不同的存儲庫分支處獲取該代碼的所有特征,通過合并,最后使用編譯器來對它進行編譯的整個過程。
一旦完成了構建,我們就進入到了測試階段。在此階段中,我們將采取各種測試,其中包括:功能塊測試、單元測試、以及可用性測試。
在測試完成之后,我們將移步至部署階段,即:將代碼部署到暫存服務器或測試服務器中。在此階段,您可以通過模擬器來查看具體的代碼,及其整個應用程序的運行狀況。
一旦成功部署了代碼,您就可以開展另一輪可用性測試了。如果一切正常,那么該代碼就可以被部署到生產環境了。
同時,如果在任何一個步驟中出現了錯誤,您完全可以通過電子郵件發回給開發團隊,以便他們及時予以修復。然后,他們會將新的代碼推送到版本控制系統中,讓其重回管道。
此流程周而復始,直到我們完成所有的測試與驗證,最終將代碼部署并導入生產環境的服務器上。
至此,我們已經了解了CI/CD管道及其工作原理。下面,我們將繼續討論何為Jenkins、如何通過Jenkins來部署演示性代碼、以及自動化整個過程。
CI工具及其他在CI/CD管道中的重要性
我們的任務是:從開發團隊提交代碼,到我們將其投入生產環境的全過程,實現自動化。因此,為了在整個軟件開發生命周期中實現DevOps管道的自動化模式,我們需要用到一些相應的自動化工具。
Jenkins為我們提供了各種接口和工具,來自動化整個軟件交付的過程。
首選,我們需要有一個Git的存儲庫,以供開發團隊提交他們的代碼。然后,Jenkins就從此處開始“接手”。它是一款前端工具,您可以自定義整個工作流或任務。在此,我們的工作就是要確保對特定工具、或特定應用程序,實現持續集成與交付的過程。
從Git的角度而言,Jenkins采取的是“拉代碼”的模式,然后Jenkins轉向交付階段,實現從各個分支提交代碼。構建階段主要進行的是代碼編譯。如果是Java代碼,我們可以使用Jenkins中諸如maven之類的工具,來編譯代碼,并且通過運行一系列測試來實現部署。同樣,這些測試案例也都是由Jenkins來進行“監管”的。
之后,代碼被轉移到緩存服務器上,以便使用Docker來進行部署。最后,在經過一系列單元測試和可用性測試之后,代碼“流入”生產環境。
Docker是一個虛擬環境,我們可以在其中創建服務器。實際上,創建一整臺服務器、并部署需要測試的工件也只需要幾秒鐘的時間。那么我們該如何使用Docker呢?
如前所述,通過存儲庫,我們不但可以永久性地存儲各種鏡像,還能幾秒鐘之內構建出自己的鏡像系統,并且運行整個群集。另外,您還可以在任何環境中隨時對它們進行按需復制。
動手實踐:使用Docker和Jenkins來構建CI/CD管道
步驟 1:在VM中打開終端,使用以下命令啟動Jenkins和Docker:
- systemctl start jenkins
- systemctl enable jenkins
- systemctl start docker
注意:如果系統顯示“特權錯誤(privileges error)”,請在上述命令之前先使用sudo。
步驟 2:在指定端口上打開Jenkins。單擊“新建項目”以創建新的作業。
步驟 3:選擇一個自由類型(freestyle)項目,并輸入項目的名稱(此處我使用的是Job1),然后單擊確定。
步驟 4:選擇源代碼管理(Source Code Management)并點選Git存儲庫。單擊應用并保存(Apply and Save)按鈕。
步驟 5:然后依次點擊構建(Build) -> 選擇執行(Execute)Shell。
步驟 6:逐條輸入shell命令。在此,它將通過建立存檔文件,來產生一個war文件。之后,它通過“拉”的方式獲得相關代碼,并且使用maven來安裝軟件包。注意,它只需安裝各個依賴項,并對應用程序進行編譯。
步驟 7:單擊“新建項目”,以創建新的作業。
步驟 8:選擇自由類型(freestyle)項目,并輸入項目的名稱(此處我使用的是Job2),然后單擊確定。
步驟 9:選擇源代碼管理(Source Code Management)并點選Git存儲庫。單擊應用并保存(Apply and Save)按鈕。
步驟 10:然后依次點擊構建(Build) -> 選擇執行(Execute)Shell。
步驟 11:逐條輸入shell命令。在此,它將進入集成階段,并生成相應的Docker容器。
步驟 12:單擊“新建項目”,以創建新的作業。
步驟 13:選擇自由類型(freestyle)項目,并輸入項目的名稱(此處我使用的是Job3),然后單擊確定。
步驟 14:選擇源代碼管理(Source Code Management)并點選Git存儲庫。單擊應用并保存(Apply and Save)按鈕。
步驟 15:然后依次點擊構建(Build) -> 選擇執行(Execute)Shell。
步驟 16:逐條輸入shell命令。在此,它將檢查Docker的容器文件,然后將其部署到8180號端口上。請單擊“保存”按鈕。
步驟 17:現在依次點擊Job1 -> 配置(Configure)。
步驟 18:單擊構建后操作(Post-build Actions) -> 構建其他項目(Build other projects)。
步驟 19:輸入在Job1之后構建的項目名稱(此處為Job2),然后單擊“保存”。
步驟 20:現在點擊Job2 -> 配置(Configure)。
步驟 21:單擊構建后操作(Post-build Actions) -> 構建其他項目(Build other projects)。
步驟 22:輸入在Job2之后構建的項目名稱(此處為Job3),然后單擊“保存”。
步驟 23:現在,我們將創建一個管道的視圖。請點擊“+”號。
步驟 24:選擇“構建管道視圖(Build Pipeline View)”,并輸入視圖的名稱(此處我命名為CI CD Pipeline)。
步驟 25:選擇初始化作業(initialJob,這里我輸入了Job1),并單擊確定。
步驟 26:單擊“運行(Run)”按鈕,以啟動CI/CD進程。
步驟 27:在成功構建之后,請輸入localhost:8180/sample.text。它將能夠運行該應用程序。
至此,我們已經了解了如何使用Docker和Jenkins來創建一個CI/CD管道。記住:DevOps的宗旨就是為了能夠更快速、更可靠地創建出更高質量的軟件,同時也能促進團隊之間更密切的溝通和協作。
原文標題:Learn How to Set Up a CI/CD Pipeline From Scratch,作者:Samarpit Tuli
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】