在TestProject中,我們努力使用最新的最佳實踐,並且作為基礎結構中某些組件和工作流程升級的一部分,我們將部分遷移到JenkinsX。Jenkins X無服務器設置上缺少有用的資料,因此,出於我們對共享和回饋社區的信念的一部分,我們決定創建一個功能完善的分步教程!
Jenkins X無服務器和Kubernetes的持續集成解決了以下問題:
- 為CI / CD中涉及的各個組件維護專用服務器,例如:構建服務器,測試環境,編排服務器等。
- 自動部署併發按需構建和測試環境,允許測試人員和開發人員並行發佈和測試專用功能。
- 與微服務開發和發佈流程自然集成。
在本分步指南中,我們將使用Jenkins X為基於微服務的現代雲應用程序構建CI / CD解決方案。
Jenkins X是用於Kubernetes上現代雲應用程序的CI / CD解決方案。它可以幫助我們為項目創建良好的渠道,並實施完整的CI和CD。
持續集成(CI)是一種軟件開發方法,用於自動將代碼更改從多個貢獻者集成到單個軟件項目中。連續部署(CD)是一種軟件開發方法,該方法可以自動,快速且安全地將軟件部署到生產環境中。
Jenkins X通過GitOps自動化環境管理以及在環境之間促進應用程序新版本的升級。
GitOps是用於Kubernetes集群管理和應用程序交付的軟件開發方法。當遵循這種方法時,Git是基礎架構即代碼和應用程序代碼的唯一真實來源。對所需狀態的所有更改都是Git提交。
Jenkins X為我們的拉取請求自動啟動預覽環境,因此我們可以在將更改合併到主文件之前獲得快速反饋。
讓我們開始吧!
就本教程而言,我們創建了一個帶有微服務設計的簡單演示項目,該項目將部署在Kubernetes上。我們的演示項目包括3個主要服務:一個前端應用程序和2個後端服務。
我們的演示項目顯示了後端服務的當前版本及其本身。這將有助於說明和測試我們稍後構建的CI / CD管道。
我們的演示項目服務使用Python編寫,並打包到基於Alpine映像的Docker容器中。下圖說明了我們的演示項目:
在本教程結束時,我們將擁有一個有效的CI / CD解決方案,使我們能夠以快速,可靠的方式開發,測試和交付我們的應用程序。
Jenkins X無服務器架構
在開始本教程的動手部分之前,我們需要介紹Jenkins X無服務器基礎架構的主要組件。下圖說明了這些組件:
讓我們再深入一點:
- Kubernetes –雲應用程序開發的核心,我們在其中構建,測試和部署應用程序。
- Docker映像註冊表 –構建它們後,我們將在其中存儲Docker映像。需要注意的一點是:默認情況下,Jenkins X使用您的雲提供商的Docker註冊表,但是可以將其配置為使用其他私有註冊表。
- Git –保存代碼的地方–應用程序源代碼,系統配置和系統狀態。
- 航海圖博物館 –我們存儲舵圖的位置。
- 測試框架 –我們在測試應用程序更改的地方使用 TestProject(免費)。
- Kaniko –構建我們的Docker容器。
- Skaffold –在Kubernetes上部署我們的Docker容器。
- 草稿 –創建用於部署應用程序的Helm圖表。
- Tekton –這就是運行我們的管道的原因。
- Jenkins X –協調CI / CD流程。
安裝和設置Jenkins X Serverless
現在,我們將安裝Jenkins X,並使用Google Cloud作為我們的雲提供商,但是安裝過程與其他雲非常相似。
先決條件
- Google雲帳戶(如果您還沒有,請在此處創建一個)。
- Github帳戶(如果您還沒有,則可以在此處創建一個)。
在Google Kubernetes Engine(GKE)上安裝Jenkins X
- 登錄到您的Google雲帳戶。
- 轉到控制檯(右上角的控制檯按鈕)。
- 轉到您的雲外殼(位於上方藍色欄右側的[> _]按鈕)。
- 運行以下命令來安裝jx:
5.運行以下命令以:
- 部署為Jenkins X配置的新Kubernetes集群。
- 部署無服務器的Jenkins X組件:
6.現在,將詢問一系列配置安裝的問題:
- 與集群關聯的項目。如果您是新的Google雲用戶,請選擇“我的第一個項目”,否則請選擇所需的人。
- 群集的部署位置(地理區域)。選擇最接近您的一個。
- 機器類型,如果您沒有經驗,請使用默認值。
- 要部署的節點數,與上面相同,可以使用默認值。
- 您想要的Jenkins X部署類型,選擇帶有Tekton Pipelines的無服務器JenkinsX。
- 系統將詢問您是否要創建負載平衡器,同意該負載平衡器,否則您將無法工作。
- 系統將詢問您是否要將nip.io用作魔術DNS。同意這一點。
- 不要忘記安裝會在您的Github帳戶中創建多個存儲庫並詢問管理員權限,強烈建議您為教程創建一個新帳戶。您將被問到有關您的Github帳戶的各種問題,請相應回答,不要使用電子郵件作為帳戶名,這可能會在以後出現問題,請使用您為該帳戶選擇的暱稱。
- 安裝將開始,安裝完成後,將為您提供一些有用的鏈接和Jenkins X相關服務的密碼,請不要忘記將其保存在將來使用的地方。
而已!您已準備好開始。
將現有項目導入Jenkins X
在這一部分中,我們將學習如何將現有項目導入JenkinsX。
Jenkins X默認創建的不同環境
在將項目導入到Jenkins X之前,我們需要了解Jenkins X默認創建的不同環境是什麼。默認情況下,Jenkins X創建以下環境:
- jx環境 –在此環境中,我們執行構建和單元測試。
- 登臺環境 –在此環境中,我們執行集成測試。
- 生產環境 –我們的最終生產版本。
- 預覽環境 –用於測試的環境。
第1步–創建新存儲庫
您需要做的第一件事是將資源庫與項目的源代碼進行分叉,然後將其克隆到您的開發環境中。
在本教程的這一章中,我們將以Backend1演示項目為例。您應該派生主教程存儲庫並運行以下命令,以將其克隆到您的開發環境中:
現在,您可以使用一個新的存儲庫,但是仍然沒有Jenkins X所需的所有文件。
第2步–為Jenkins X添加必要的文件
要為Jenkins X添加必要的文件,您需要做的第一件事就是導入項目。下面的命令將導入項目。在運行此命令之前,請驗證您是否位於我們剛剛克隆到開發環境中的項目的主目錄中:
作為默認導入過程的一部分,Jenkins X將遍歷代碼,並根據編程語言為項目選擇正確的默認構建包。我們的項目是使用Python開發的,因此它將是一個Python構建包。
您可以通過查看以下內容查看構建包的內容:
要驗證導入進度,請運行以下命令:
導入成功完成後,您將看到構建包中的所有文件現在都顯示在項目存儲庫中,不同之處在於其中一些以前是模板,而現在是合法文件。
等等,這裡發生了什麼?
讓我們回顧一下導入過程幕後發生的情況:
- Jenkins X選擇正確的構建包並將新文件推送到項目的存儲庫。
- Jenkins X創建一個Jenkins項目。
- Jenkins X創建一個Webhook,以在項目存儲庫中的代碼更改時觸發構建。
- Jenkins X使用skaffold.yaml構建容器映像。
- Jenkins X使用掌舵圖表來創建構建並將其推送到圖表博物館。
- Jenkins X將更改提交到暫存環境存儲庫。
- 它將新服務版本添加為對環境的依賴。
- 它為新服務添加了一個入口。
- Jenkins X將更改應用於Kubernetes集群,新服務由Kubernetes部署在登臺環境中。
- Jenkins X為我們提供了新服務的URL。
- 我們可以通過HTTP與我們的服務進行交互。
令人印象深刻,是嗎?
這個過程的妙處在於,所有更改都在Git中進行了跟蹤,可以通過以下步驟進行查看:
為了驗證服務是否已正確部署到登臺環境中,可以在導入過程結束時通過將在控制檯中打印的URL查看服務。例如,在我們的演示項目Backend1中,打開提供的URL後,以下JSON應出現在瀏覽器中:
您可以看到獲得了服務的名稱和版本,但是單元測試又如何呢?默認構建包中不包含此階段。為了解決這個問題,您將需要一個針對Jenkins X的自定義構建包。
為Jenkins X創建自定義構建包
在這一部分中,我們將為Jenkins X創建一個自定義構建包,並將單元測試作為其中的一部分。
構建包定義了每次開發人員更改項目源代碼時如何構建,測試和交付項目。Jenkins X提供了基本的構建包,但在現實生活中,您需要為項目創建一個自定義的構建包。
建議將構建包保存在中央存儲庫中,並在公司的開發人員之間共享它們。
為了為教程項目創建自定義構建包,您需要做的第一件事是將官方構建庫與社區構建包合併。然後,使用以下命令將存儲庫克隆到您的開發環境:
建議添加上游存儲庫以接收來自官方存儲庫的將來更新,以保持最新狀態。使用以下命令來這樣做:
在Jenkins X中選擇構建包的來源
默認情況下,構建包的源位於以下文件夾中:
要將源更改為指向新創建的存儲庫,請運行以下命令:
從現在開始,當您導入新項目時,Jenkins X將使用新創建的存儲庫中的構建包。
默認情況下,Jenkins X提供流行開發語言的構建包。由於我們的項目是用Python編寫的,因此,我們將使用Python構建包作為定製構建包的基礎。
將Python build pack文件夾複製到一個名為tutorial-build-pack的文件夾中。為此,請運行以下命令:
現在,讓我們看一下我們剛剛創建的新構建包文件夾中的文件:
- Dockerfile –包含docker鏡像的構建。
- 圖表 –包含Helm圖表和Kubernetes文件,這些文件描述瞭如何將項目部署到暫存和生產環境。
- pipeline.yaml –包含構建,測試和交付項目的步驟。
- 預覽 –包含Helm圖表和Kubernetes文件,這些文件描述瞭如何將項目部署到預覽環境。
- skaffold.yaml –包含構建和存儲Docker映像的步驟。
在Jenkins X中將單元測試支持添加為自定義構建包的一部分
為了在定製構建包中實施單元測試,您需要擴展基本構建包。要擴展構建包,您只需要修改位於構建包主目錄中的pipeline.yaml文件即可。
假設您要添加一個在構建映像之前運行一些單元測試的腳本。為了示例,您將運行echo命令“正在運行單元測試!”。但實際上,您應該運行將運行測試的命令或腳本。
現在,在構建服務之前,將新步驟添加到pipeline.yaml以執行新腳本。使用以下命令來這樣做:
新文件應如下所示:https : //github.com/testproject-io/jenkinsx-tutorial/blob/master/build-pack-pipeline.yaml
為了使更改生效,我們需要將更改提交到構建包。但是,新創建的構建包未與任何項目關聯。
就本教程而言,如果您已經分叉並克隆了主教程存儲庫,則跳過下一步,只需在存儲庫文件夾內輸入Backend2文件夾。
如果尚未克隆主教程存儲庫,請運行以下命令:
現在,我們有了一個新的存儲庫。要使用已創建的構建包導入新項目,請運行以下命令:
為了檢查是否使用我們的新單元測試正確執行了構建,請運行以下命令:
恭喜!您的單元測試正在執行中!
Jenkins X中的集成測試
在這一部分中,我們將學習如何對通過Jenkins X部署的服務實施集成測試。
為了瞭解在哪裡實施集成測試,您需要了解它們的目的–驗證我們生產環境中的所有服務將以正確的方式相互通信。
在Jenkins X中,您可以根據需要擁有任意數量的環境,但是現在我們將重點放在登臺環境上,因為該環境模擬了將發佈到生產環境中的下一個版本。因此,如果服務在登臺環境中以正確的方式進行通信,那麼我們可以假定,如果將它們轉移到生產環境中,它們將無縫運行。
如果您從一開始就已按照本教程進行操作,則應該具有一個登臺環境,其中包括:兩個工作服務,Backend1和Backend2。這些服務彼此之間沒有交互,因此我們無法執行實際的集成測試來驗證服務是否正確通信。
為了使集成測試示例有意義,我們將添加一個與兩個後端服務交互的前端服務。
就本教程而言,如果您已經分叉並克隆了主教程存儲庫,則跳過下一步,只需在存儲庫文件夾內輸入Frontend文件夾。
如果尚未克隆主教程存儲庫,請運行以下命令:
導入成功完成後,請驗證3個服務是否已在臨時環境中啟動並正在運行。
要驗證這三個服務是否可用,您可以運行以下命令:
如何通過API使用TestProject執行集成測試
TestProject是由社區提供動力的測試自動化平臺,完全免費。它建立在Selenium和Appium之上,支持所有主要操作系統,並使軟件團隊的每個成員都可以輕鬆協作和測試Web,Android和iOS應用程序。TestProject非常適合CI / CD管道內的集成測試,因為TestProject公開了RESTful API,該API允許研發團隊安排和觸發自動化,獲取狀態並檢索測試結果。此外,TestProject代理可輕鬆部署在各種平臺(本地和遠程)上,包括可在無服務器的情況下部署的代理的docker化版本,從而可按需進行並行分佈式測試。
讓我們開始吧!
- 在這裡創建一個TestProject帳戶,它是完全免費的!
- 下載並註冊TestProject代理。
- 創建您的集成測試。在此示例中,我們將使用記錄的測試,但是您也可以使用TestProject以C#或Java開發Selenium和Appium編碼的測試。
- 用TestProject生成您的API密鑰,以從您的CI / CD工具訪問TestProject平臺。
- 使用其API在TestProject中執行測試自動化作業。
- 例如,您可以使用以下Python腳本從CI / CD工具執行TestProject作業:https : //github.com/testproject-io/jenkinsx-tutorial/blob/master/trigger-job.py
現在,讓我們實施集成測試!您需要做的第一件事是將登臺環境存儲庫克隆到您的開發環境。使用以下命令:
將存儲庫克隆到您的開發環境之後,可以在主目錄文件夾中找到一個名為jenkins-x.yaml的文件。該文件描述了代表將服務部署到登臺環境的管道的步驟。
為了在構建後執行集成測試,我們需要向該文件添加以下命令:
新文件應如下所示:https : //github.com/testproject-io/jenkinsx-tutorial/blob/master/staging-pipeline.yml
現在,我們已經添加了將執行集成測試的命令,我們可以將更改推送到Git。
恭喜,每次將任何部署到暫存環境的集成測試都將執行!
您可以通過查看構建日誌來驗證這一點:
感謝你的閱讀
閱讀更多 一名小白人員 的文章