如何從零開始搭建 CI/CD 流水線

在當前 DevOps 的趨勢下,持續集成(CI)和持續部署(CD)具有支柱性地位,那麼能夠成功搭建 CI/CD 流水線就至關重要了。我們可能會在各種角色的崗位描述中發現關於「持續集成」和「持續部署」技能的要求,比如:數據工程師、雲解決方案架構師、數據科學家等。爲了在開發團隊和運營團隊之間搭建橋樑,CI/CD 流水線實現了應用程序的自動構建、自動測試和自動部署。本文中,我們將介紹什麼是 CI/CD 流水線,以及它是如何工作的。

在介紹 CI/CD 流水線的工作原理之前,我們先了解一下什麼是 DevOps。

什麼是 DevOps?

DevOps 是一種軟件開發方法。它將持續開發、持續測試、持續集成、持續部署和持續監控貫穿於軟件開發的整個生命週期。當前幾乎所有的頂尖公司均採用了該方法,用以提高軟件開發質量,並縮短軟件開發生命週期。從而以達到每個公司對軟件產品的期望,交付出客戶最滿意的產品。

DevOps 生命週期

要想完整的理解 DevOps,我們還需要了解一下 DevOps 的生命週期。接下來,我將通過一張圖來展示 DevOps 的生命週期以及它和軟件開發生命週期之間的關係。

如何從零開始搭建 CI/CD 流水線

什麼是 CI/CD 流水線?

CI 代表持續集成(Continuous Integration),CD 代表持續交付(Continuous Delivery)和持續部署(Continuous Deployment)。也可以將它們看作是類似於軟件開發生命週期的過程。

現在我們來看一下它是如何工作的。

如何從零開始搭建 CI/CD 流水線

如上圖所示,該流水線展示了一個軟件在其最終交付給客戶或者投入上線之前,它在其生命週期內各個階段中的移動過程。

接下來我們具體看一下該 CI/CD 流水線。假如我們要構建一款 Web 應用程序,並將它部署在一個現場 Web 服務器上。同時我們有一組開發人員,他們主要負責編寫代碼,並將代碼構建爲 Web 應用程序。假設現在開發團隊已經將代碼提交到版本控制系統(如:Git,SVN)中了。

構建階段

接下來,代碼將會經歷構建階段,這也是 CI/CD 流水線的第一階段。在此之前,開發者已經將他們的代碼加上合適的標籤,並提交到版本控制系統中了。

如何從零開始搭建 CI/CD 流水線

假如我們採用的是 Java 語言,那麼還需要先進行代碼編譯。因此,代碼在通過版本控制階段之後,會先在構建階段予以編譯。該階段會從代碼庫的各個分支中獲取到所有的功能代碼,合併後最終通過一個編譯器來編譯它們。這整個過程都被稱爲「構建階段」。

測試階段

如何從零開始搭建 CI/CD 流水線

構建階段結束後,將會繼續進入到代碼的「測試階段」。在這個階段中,我們會進行各種各樣的測試,單元測試就是其中之一。在該階段中,我們會測試代碼中多個組件間的關係或者單個組件的功能,同時也會進行軟件的可用性測試。

部署階段

如何從零開始搭建 CI/CD 流水線

測試階段完成後,就要進入「部署階段」了。在該階段,代碼將會被部署到準生產環境服務器(staging server)或者測試環境服務器(test server)中。同時在該階段中,我們既可以查看程序代碼,也可以在模擬器中運行該應用程序。

自動測試階段

如何從零開始搭建 CI/CD 流水線

只要我們的代碼部署成功,我們就可以運行另一組可用性測試了。該階段結束後,如果所有的測試都通過了,那麼就可以將其部署到生產環境中了。

部署到生產環境

如何從零開始搭建 CI/CD 流水線

另外值得一提的是我們可能在每一個階段的執行過程中遇到一些錯誤。在這種情況下,我們可以將錯誤郵件發回到開發團隊中,以便他們能夠及時修復這些錯誤。當開發團隊修復完成後,就可以將代碼重新提交到版本控制系統中,然後再次從頭開始執行該流水線。

如果在執行測試的過程中遇到了任何錯誤,那麼這些錯誤也將反饋給開發團隊,等他們修復完成後,同樣會再次觸發該流水線,進行新一輪的持續迭代。

度量和驗證階段

如何從零開始搭建 CI/CD 流水線

因此,整個生命週期將會繼續迭代下去,直到我們得到可以直接部署到生產環境中的代碼或者產品。除此之外,在生產環境中我們還需要對代碼進行度量和驗證,以實時監控應用的線上運行狀態。

到目前爲止,我們已經瞭解了 CI/CD 流水線及其工作原理,接下來我們將繼續介紹什麼是 Jenkins ,以及如何使用 Jenkins 部署示例代碼,並自動化整個過程。

終極 CI 工具 - Jenkins

我們的目標是要將軟件開發生命週期的整個過程都自動化,從開發人員向代碼庫中提交代碼開始,到將此代碼投入生產環境中使用爲止。

爲了使整個軟件開發流程處於 DevOps 模式或自動化模式,我們就需要對 CI/CD 流水線進行自動化。因此,我們還需要一款自動化工具來做這件事情,它就是 Jenkins。

如何從零開始搭建 CI/CD 流水線

Jenkins 爲我們提供了各種接口和工具,用以實現軟件開發整個過程的自動化。

首先,我們需要擁有一個可以供開發人員提交代碼的倉庫。同時,Jenkins 也提供了前端展示的頁面,我們可以使用該前端頁面來定義整個流水線的作業(job)和任務(task)。對於某一個應用程序而言,我們的目標就是通過特定的工具實現其持續集成和持續交付的自動化流程。

Jenkins 會從 Git 代碼倉庫中拉取各個分支的代碼,然後將其移動到 “代碼提交階段”。拉取到各個分支的代碼之後,Jenkins 就會將其繼續移動到“構建階段”,該階段會對代碼進行編譯工作。如果是像 Java 這類語言的話,我們還可以在 Jenkins 中選用 maven 之類的構建工具,通過 maven 對代碼進行編譯。之後在部署過程中,還可以將編譯好的代碼進行一系列的測試,同時這些測試也會由 Jenkins 監督執行。

之後,Jenkins 就會將代碼移動到準生產環境,並使用 Docker 進行部署。在準生產環境中會運行一系列單元測試和可用性測試。如果能夠通過所有的測試,Jenkins 就會將它繼續移動到生產環境中。

這就是 Jenkins 在持續集成和持續交付中所發揮的作用,它幾乎能夠自動化所有的事情。現在,我們還需要一個和生產環境一致的環境用以部署代碼,它就是 Docker。

Docker

如何從零開始搭建 CI/CD 流水線

Docker 就像是一個虛擬的環境,我們可以在其中創建一個服務器。我們可能需要花費一點時間在 Docker 中部署整個服務器以及我們想要測試的工件。那麼,這裏我們遇到的問題就是:

我們爲什麼要使用 Docker 呢?

如前所述,通過 Docker 我們可以在幾秒鐘的時間內運行整個服務器集羣。同時我們還有 Docker 鏡像的註冊中心,可以用來永久地存儲構建出的 Docker 鏡像。因此,我們在任何時候都能複製出一份 Docker 鏡像並運行它。

Docker 和 Jenkins 構建 CI/CD 流水線

第 1 步:在虛擬機中打開終端。通過命令 “systemctl Start Jenkins”、“systemctl enable Jenkins” 和 “systemctl Start Docker” 來啓動 Jenkins 和 Docker。

注意:如果提示 “privileges error” 錯誤的話,就在命令前面加上 sudo。

如何從零開始搭建 CI/CD 流水線

第 2 步:在瀏覽器中打開在指定端口運行的 Jenkins。通過點擊 “New Item” 來創建一個 Job。

如何從零開始搭建 CI/CD 流水線

第 3 步:選擇 “freestyle project” 並填寫項目的名稱(如下以 “Job1” 爲例),並點擊 OK 確認。

如何從零開始搭建 CI/CD 流水線

第 4 步:選擇 “Source Code Management”(源代碼管理),並提供一個 Git 倉庫地址。然後再點擊 “Apply” 和 “Save” 按鈕確認。

如何從零開始搭建 CI/CD 流水線

第 5 步:點擊 “Build” 選項,並在下面的菜單中選擇 “Select Execute Shell”。

如何從零開始搭建 CI/CD 流水線

第 6 步:輸入 shell 命令。如下示例腳本會構建已歸檔的文件,並得到 war 格式的文件。在此之後,它將會拉取最新的代碼,然後,採用 maven 安裝所依賴的包。因此,在這個步驟中只是簡單的安裝了依賴並對應用程序進行了編譯。

如何從零開始搭建 CI/CD 流水線

第 7 步:通過點擊 “New Item” 來創建一個新的 Job。

如何從零開始搭建 CI/CD 流水線

第 8 步:選擇 “freestyle project” 並填寫項目的名稱(如下以 “Job2” 爲例),並點擊 OK 確認。

如何從零開始搭建 CI/CD 流水線

第 9 步:選擇 “Source Code Management”(源代碼管理),並提供一個 Git 倉庫地址。然後再點擊 “Apply” 和 “Save” 按鈕確認。

如何從零開始搭建 CI/CD 流水線

第 10 步:點擊 “Build” 選項,並在下面的菜單中選擇 “Select Execute Shell”。

如何從零開始搭建 CI/CD 流水線

第 11 步:輸入 shell 命令。如下示例腳本將會開始代碼的集成階段,並構建出 Docker 容器。

如何從零開始搭建 CI/CD 流水線

第 12 步:通過點擊 “New Item” 來創建一個新的 Job。

如何從零開始搭建 CI/CD 流水線

第 13 步:選擇 “freestyle project” 並填寫項目的名稱(如下以 “Job3“ 爲例),並點擊 OK 確認。

如何從零開始搭建 CI/CD 流水線

第 14 步:選擇 “Source Code Management”(源代碼管理),並提供一個 Git 倉庫地址。然後再點擊 “Apply” 和 “Save” 按鈕確認。

如何從零開始搭建 CI/CD 流水線

第 15 步:點擊 “Build” 選項,並在下面的菜單中選擇 “Select Execute Shell”。

如何從零開始搭建 CI/CD 流水線

第 16 步:輸入 shell 命令。如下示例將會檢查 Docker 容器文件,並將它部署在 8180 端口上。點擊 Save 按鈕保存。

如何從零開始搭建 CI/CD 流水線

第 17 步:點擊選擇 Job1 ,進入 Job1 後再選擇 Configure 選項。

如何從零開始搭建 CI/CD 流水線

第 18 步:點擊 Post-build Actions 選項,並在下面的菜單中選擇 Build other projects。

如何從零開始搭建 CI/CD 流水線

第 19 步:填寫在 Job1 構建完成後需要執行的任務(如下示例中爲 Job2),並點擊 Save 按鈕保存。

如何從零開始搭建 CI/CD 流水線

第 20 步:點擊選擇 Job2,進入 Job2 後再選擇 Configure 選項。

如何從零開始搭建 CI/CD 流水線
如何從零開始搭建 CI/CD 流水線

第 21 步:點擊 Post-build Actions 選項,並在下面的菜單中選擇 Build other projects。

如何從零開始搭建 CI/CD 流水線

第 22 步:填寫在 Job2 構建完成後需要執行的任務(如下示例中爲 Job3),並點擊 Save 按鈕保存。

如何從零開始搭建 CI/CD 流水線

第 23 步:接下來我們將通過點擊 “+” 號創建一個流水線視圖。

如何從零開始搭建 CI/CD 流水線

第 24 步:選擇 “Build Pipeline View” 並填寫視圖的名稱(如下以 CI CD Pipeline 爲例)。

如何從零開始搭建 CI/CD 流水線

第 25 步:選擇 “Initial Job”(如下以 Job1 爲例),並點擊 OK 按鈕確認。

如何從零開始搭建 CI/CD 流水線

第 26 步:點擊 Run 按鈕來啓動 CI/CD 流水線的流程。

如何從零開始搭建 CI/CD 流水線

第 27 步:在流水線成功運行完成之後,我們可以在瀏覽器中打開 localhost:8180/sample.text 進行驗證。此時該應用程序已處於運行狀態,並且瀏覽器中會顯示出此文本文件的具體內容。

如何從零開始搭建 CI/CD 流水線

到目前爲止,我們已經學習瞭如何使用 Docker 和 Jenkins 來創建 CI/CD 流水線。之所以要採用 DevOps 模式,目的就是爲了可以更快速更可靠的構建出高質量的軟件,同時還能夠加深團隊之間的溝通和協作。

英文原文: https://medium.com/edureka/ci-cd-pipeline-5508227b19ca

文章來源:https://www.infoq.cn/article/WHt0wFMDRrBU-dtkh1Xp

發佈了134 篇原創文章 · 獲贊 178 · 訪問量 91萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章