了解如何從頭開始設(shè)置 CI/CD 管道
CI/CD 管道實(shí)施或持續(xù)集成/持續(xù)部署是現(xiàn)代 DevOps 環(huán)境的支柱。它通過自動(dòng)化應(yīng)用程序的構(gòu)建、測試和部署來彌合開發(fā)和運(yùn)營團(tuán)隊(duì)之間的差距。在此博客中,我們將了解什么是 CI/CD 管道及其工作原理。
在進(jìn)入 CI/CD 管道之前,讓我們先了解 DevOps。
DevOps 是一種軟件開發(fā)方法,涉及在整個(gè)開發(fā)生命周期中對軟件進(jìn)行持續(xù)開發(fā)、持續(xù)測試、持續(xù)集成、持續(xù)部署和持續(xù)監(jiān)控。這是所有頂級公司都采用的開發(fā)高質(zhì)量軟件和縮短開發(fā)生命周期的過程,從而提高客戶滿意度,這是每個(gè)公司都想要的。
如果不了解 DevOps 的生命周期,您對 DevOps 的理解是不完整的?,F(xiàn)在讓我們看看 DevOps 生命周期并探討它與軟件開發(fā)階段的關(guān)系。
CI 代表持續(xù)集成,CD 代表持續(xù)交付/持續(xù)部署。您可以將其視為類似于軟件開發(fā)生命周期的過程。
讓我們看看它是如何工作的。
上面的管道是一個(gè)邏輯演示,說明軟件在交付給客戶之前或投入生產(chǎn)之前將如何沿著此生命周期的各個(gè)階段移動(dòng)。
讓我們來看一個(gè) CI/CD 管道的場景。假設(shè)您要構(gòu)建一個(gè) Web 應(yīng)用程序,該應(yīng)用程序?qū)⒉渴鹪趯?shí)時(shí) Web 服務(wù)器上。您將有一組開發(fā)人員負(fù)責(zé)編寫代碼,他們將進(jìn)一步構(gòu)建 Web 應(yīng)用程序?,F(xiàn)在,當(dāng)開發(fā)團(tuán)隊(duì)將此代碼提交到版本控制系統(tǒng)(如 git、svn)時(shí)。接下來,它會進(jìn)入構(gòu)建階段,這是管道的第一階段,開發(fā)人員在此階段輸入他們的代碼,然后代碼再次進(jìn)入版本控制系統(tǒng)并帶有適當(dāng)?shù)陌姹緲?biāo)簽。
假設(shè)我們有 Java 代碼,它需要在執(zhí)行前進(jìn)行編譯。通過版本控制階段,它再次進(jìn)入編譯階段。您從存儲庫的各個(gè)分支獲得該代碼的所有功能,這些分支合并它們并最終使用編譯器對其進(jìn)行編譯。這整個(gè)過程稱為構(gòu)建階段。
構(gòu)建階段結(jié)束后,您將進(jìn)入測試階段。在這個(gè)階段,我們有各種各樣的測試。其中之一是單元測試(在其中測試軟件的塊/單元或其完整性測試)。
測試完成后,您將進(jìn)入部署階段,將其部署到暫存或測試服務(wù)器中。在這里,您可以查看代碼,也可以在模擬器中查看應(yīng)用程序。
成功部署代碼后,您可以運(yùn)行另一個(gè)健全性測試。如果一切都被接受,那么它就可以部署到生產(chǎn)環(huán)境中。
同時(shí),在每一步中,如果有錯(cuò)誤,您可以發(fā)郵件給開發(fā)團(tuán)隊(duì),以便他們進(jìn)行修復(fù)。然后他們會將其推送到版本控制系統(tǒng)中,然后返回到管道中。
再一次,如果在測試期間報(bào)告了任何錯(cuò)誤,反饋將再次發(fā)送給開發(fā)團(tuán)隊(duì),他們在那里修復(fù)它,并在需要時(shí)重復(fù)該過程。
這個(gè)生命周期一直持續(xù)到我們獲得可以部署到我們測量和驗(yàn)證代碼的生產(chǎn)服務(wù)器的代碼/產(chǎn)品。
我們現(xiàn)在了解了 CI/CD 管道及其工作原理;現(xiàn)在,我們將繼續(xù)了解 Jenkins 是什么以及我們?nèi)绾问褂?Jenkins 部署演示代碼并自動(dòng)化整個(gè)過程。
終極 CI 工具及其在 CI/CD 管道中的重要性
我們的任務(wù)是自動(dòng)化整個(gè)過程,從開發(fā)團(tuán)隊(duì)給我們代碼并提交代碼到我們將其投入生產(chǎn)。我們將自動(dòng)化管道,以便在 DevOps/自動(dòng)化模式下實(shí)現(xiàn)整個(gè)軟件開發(fā)生命周期。為此,我們需要自動(dòng)化工具。
Jenkins為我們提供了各種接口和工具,以便將整個(gè)過程自動(dòng)化。
我們有一個(gè) Git 存儲庫,開發(fā)團(tuán)隊(duì)將在其中提交代碼。然后,Jenkins 從那里接管,這是一個(gè)前端工具,您可以在其中定義整個(gè)工作或任務(wù)。我們的工作是確保該特定工具或特定應(yīng)用程序的持續(xù)集成和交付過程。
Jenkins 從 Git 中提取代碼,然后 Jenkins 將其移至提交階段,代碼從每個(gè)分支提交。構(gòu)建 階段是我們編譯代碼的地方。如果是Java代碼,我們在Jenkins中使用maven等工具,然后編譯該代碼,可以部署運(yùn)行一系列測試。這些測試用例再次由 Jenkins 監(jiān)督。
然后,它移動(dòng)到登臺服務(wù)器以使用Docker進(jìn)行部署。經(jīng)過一系列單元測試或健全性測試后,它會進(jìn)入生產(chǎn)階段。
Docker就像一個(gè)虛擬環(huán)境,我們可以在其中創(chuàng)建服務(wù)器。創(chuàng)建整個(gè)服務(wù)器并部署我們要測試的工件需要幾秒鐘。但是這里出現(xiàn)了問題:
我們?yōu)槭裁匆褂?Docker?
正如我們之前所說,您可以在幾秒鐘內(nèi)運(yùn)行整個(gè)集群。我們有一個(gè)圖像存儲注冊表,您可以在其中構(gòu)建圖像并永久存儲它。您可以在任何可以自我復(fù)制的環(huán)境中隨時(shí)使用它。
動(dòng)手實(shí)踐:使用 Docker 和 Jenkins 構(gòu)建 CI/CD 管道
第 1 步:在 VM 中打開終端。使用這些命令啟動(dòng) Jenkins 和 Docker:
systemctl start jenkins
systemctl enable jenkins
systemctl start docker
注意:sudo如果顯示“權(quán)限錯(cuò)誤”,請?jiān)诿钋笆褂?。
第 2 步:在您指定的端口上打開 Jenkins。單擊 “新建項(xiàng)目” 以創(chuàng)建作業(yè)。
第 3 步:選擇一個(gè) 自由式項(xiàng)目并提供項(xiàng)目名稱(這里我給出了 Job1),然后單擊“確定”。
第 4 步:選擇源代碼管理并提供Git存儲庫。單擊“應(yīng)用并保存”按鈕。
第 5 步:然后點(diǎn)擊 Build->Select Execute Shell。
第 6 步:提供 shell 命令。在這里,它將構(gòu)建存檔文件以獲取 war 文件。之后,它將獲取已經(jīng)拉取的代碼,然后使用 maven 安裝包。它只是安裝依賴項(xiàng)并編譯應(yīng)用程序。
第 7 步:通過單擊“新建項(xiàng)目”創(chuàng)建新 作業(yè)。
第 8 步:選擇 自由式項(xiàng)目并提供項(xiàng)目名稱(這里我給出了 Job2),然后單擊確定。
第 9 步:選擇源代碼管理并提供Git存儲庫。單擊“應(yīng)用并保存”按鈕。
第 10 步:然后點(diǎn)擊 Build->Select Execute Shell。
第 11 步:提供 shell 命令。在這里它將開始集成階段并 構(gòu)建Docker 容器。
第 12 步:通過單擊“新建項(xiàng)目”創(chuàng)建新 作業(yè)。
第 13 步:選擇 自由式項(xiàng)目并提供項(xiàng)目名稱(這里我給出了 Job3),然后單擊確定。
第 14 步:選擇源代碼管理并提供Git存儲庫。單擊“應(yīng)用并保存”按鈕。
第 15 步:然后點(diǎn)擊 Build->Select Execute Shell。
第 16 步:提供 shell 命令。在這里它將檢查 Docker 容器文件,然后將其部署到端口號 8180。單擊“保存”按鈕。
第 17 步:現(xiàn)在點(diǎn)擊 Job1 -> Configure。
第 18 步:點(diǎn)擊 Post-build Actions -> Build other projects。
第 19 步:提供要在 Job1(這里是 Job2)之后構(gòu)建的項(xiàng)目名稱,然后單擊 Save。
第 20 步: 現(xiàn)在點(diǎn)擊 Job2 -> Configure。
第 21 步:點(diǎn)擊 Post-build Actions -> Build other projects。
第 22 步:提供要在 Job2(這里是 Job3)之后構(gòu)建的項(xiàng)目名稱,然后單擊 Save。
第 23 步:現(xiàn)在我們將創(chuàng)建一個(gè)管道視圖。單擊“+”號。
第 24 步:選擇 Build Pipeline View并提供視圖名稱(這里我提供了 CI CD Pipeline)。
第 25 步:選擇initialJob(這里我提供了 Job1)并單擊 OK。
第 26 步:單擊 “運(yùn)行” 按鈕以啟動(dòng) CI/CD 過程。
第 27 步:成功構(gòu)建后打開localhost:8180/sample.text。它將運(yùn)行該應(yīng)用程序。
到目前為止,我們已經(jīng)學(xué)習(xí)了如何使用 Docker 和 Jenkins 創(chuàng)建CI/CD 管道。DevOps 的目的是更快、更可靠地創(chuàng)建質(zhì)量更好的軟件,同時(shí)促進(jìn)團(tuán)隊(duì)之間的溝通和協(xié)作。