DevOps 是 IT 產業中一個快速發展的領域。作為一名 DevOps 工程師,跟上開發空間以避免落後至關重要。

GitOPs 是該領域已經發展成熟的流行範例。

GitOps是一種 DevOps 框架或實踐,透過它,我們使 Git 儲存庫成為單一事實來源,同時將 CI/CD 和版本控制應用於基礎設施自動化。

紅帽將其定義為「使用 Git 儲存庫作為單一事實來源來交付基礎設施即程式碼」。

另一方面, DevSecOps是 DevOps 的新改進版本,它在 SDLC(軟體開發生命週期)中灌輸安全工具和控制措施。 devsecops 方法的主要目標是“將安全性左移”,即安全性應該從一開始就成為開發生命週期的一部分,而不是事後才想到。

在本專案指南中,我們將應用 GitOps 實踐,同時實作包含許多工具的高階端對端 DevSecOps 管道。

專案概況

這是一個由兩部分組成的專案。在第一部分中,我們將設定執行 CI 管道的 EC2 執行個體。

若要了解如何使用 jenkins 建立標準的持續整合管道,請按此處

在第二部分中,我們將設定 EKS 叢集、ArgoCD 用於持續交付,並配置 Prometheus 和 Grafana 用於應用程式監控。

在這個專案中,我們將涵蓋以下內容:

- 基礎架構即程式碼:我們將使用 terraform 來設定我們的 EC2 執行個體以及 EKS 叢集。

- Jenkins 伺服器設定:在 Jenkins 伺服器上安裝和設定基本工具,包括 Jenkins 本身、Docker、OWASP 相依性檢查、Sonarqube 和 Trivy。

- EKS 叢集部署:利用 Terraform 建立 Amazon EKS 叢集,這是 AWS 上的託管 Kubernetes 服務。

- 負載平衡器配置:為 EKS 叢集配置 AWS 應用程式負載平衡器 (ALB)。

- ArgoCD 安裝:安裝並設定 ArgoCD 以實現持續交付和 GitOps。

- Sonarqube 整合:整合 Sonarqube 以在 DevSecOps 管道中進行程式碼品質分析。

- 監控設定:使用 Helm、Prometheus 和 Grafana 實現對 EKS 叢集的監控。

- ArgoCD應用程式部署:使用ArgoCD部署微服務應用程式,包括資料庫和入口元件。

第一部分:設定 CI 管道

- 第 1 步:設定 EC2 執行個體

克隆Git 儲存庫

cd進入 terraform 目錄。

執行terraform init ,然後執行terraform plan以查看建議的基礎架構變更。

執行terraform apply來實作這些變更並配置實例。

此實例使用使用者資料進行引導,一旦配置完畢,將自動安裝 jenkins、sonarqube、trivy 和 docker。

圖片描述

- 步驟2:修改應用程式程式碼

這是一個簡單但關鍵的步驟。在您剛剛複製的儲存庫中包含的Jenkinsfile中,您必須將所有出現的「 kelvinskell 」變更為您的 DockerHub 使用者名稱。如果您想自己實施這個專案,這是非常有必要的。

- 第 3 步:設定 Jenkins 伺服器

  • 在瀏覽器上登入jenkins伺服器。

圖片描述

  • 安裝建議的插件並完成註冊。

  • 前往“管理Jenkins”、“插件”,然後安裝以下插件:Docker、Docker Commons、Docker pipeline、SonarQube Scanner、Sonar 品質門、SSH2 Easy、OWASP 依賴項檢查、OWASP Markup Formatter 插件、GitHub API pluin 和GitHub pipeline插件。

圖片描述

  • 設定工具:前往 Dashborad > 管理 jenkins > 工具

git安裝

圖片描述

聲納掃描器安裝

圖片描述

依賴性檢查

圖片描述

Docker安裝

圖片描述

- 第 4 步:配置 SonarQube

  • 在瀏覽器上,連接到連接埠 9000 上的 Jenkins 伺服器 IP 位址並登入伺服器。

預設使用者名稱和密碼是“admin”。

圖片描述

登入後,按一下“手動”。

圖片描述

請按照上圖中的說明操作,然後按一下「設定」。

注意:您的專案金鑰必須完全是newsread-microservices-application 。這樣,您就不必編輯 Jenkinsfile。

  • 選擇“With Jenkins”並選擇 GitHub 作為 DevOps 平台。

圖片描述

  • 點擊“配置分析” ,在步驟3中,複製“sonar.projectKey”,稍後您將需要它。

圖片描述

  • 點選「帳戶」>「我的帳戶」>「產生令牌」。

為其命名並點擊“生成”。

圖片描述

  • 前往“管理 Jenkins”>“憑證”

  • 選擇 Secret tex 並貼上您剛剛複製的令牌。

圖片描述

  • 現在前往 Jenkins 儀表板 > 設定 Jenkins > 系統 > Sonarqube 伺服器 > 新增 Sonarqube

  • 將其命名為“SonarQube Server”,輸入秘密令牌的伺服器 URL 和憑證 ID。

請注意,我們的伺服器 url 是 localhost,因為 SonarQube 與 jenkins 託管在同一台伺服器上。

圖片描述

  • 點選“儲存”。

- 第 5 步:整合您的 DockerHub 憑證

此階段對於 Jenkins 存取您的 DockerHub 帳戶至關重要。

  • 前往“管理 Jenkins”>“憑證”>“新增憑證”

圖片描述

- 第 6 步:設定 Jenkins 管道

  • 從 Jenkins 的儀表板中,按一下「新專案」並建立管道作業。

圖片描述

  • 在“建置觸發器”下,選擇“觸發遠端建置”。

圖片描述

在「身份驗證令牌」方塊下設定秘密令牌。我們將在建立 GitHub Webhook 時使用它。

  • 在管道下,確保參數設定如下:

  • 定義:來自 SCM 的管道腳本

  • SCM:設定您的 SCM。確保只建立您的主分支。例如,如果您的主分支名為“main”,請將“*/main”放在要建置的分支下。

  • 腳本路徑:Jenkinsfile

圖片描述

注意:您必須將我的儲存庫分叉到您自己的 GitHub 帳戶。這是您存取儲存庫並能夠對其進行配置所必需的。

完成此操作後,建立 GitHub 個人存取權杖。

我們將使用 GitHub PAT 從 Jenkins 向我們的儲存庫進行身份驗證。

  • 連接到 EC2 實例,切換到 jenkins 用戶,建立 SSH 金鑰對。公鑰將作為您的 PAT 上傳到 GitHub,而私鑰將加入到我們的 Jenkins 配置中。

圖片描述

  • 返回 Jenkins 伺服器,點擊“新增憑證”

圖片描述

錯誤訊息現已消失。

圖片描述

  • 點選“儲存”。

- 第 7 步:建立 GitHub WebHook

這對於遠端觸發我們的詹金斯建置是必要的。

  • 前往儲存庫的 GitHub Webhook 建立頁面並輸入以下資訊:

URL:輸入以下 URL,根據需要替換 *** 之間的值:

***JENKINS_SERVER_URL***/job/***JENKINS_JOB_NAME***/build?token=***JENKINS_BUILD_TRIGGER_TOKEN***

圖片描述

- 第 8 步:執行管道

現在,我們已經完成了該管道的配置。是時候檢驗我們的工作了。

您可以透過進行變更並推送到 GitHub 儲存庫來觸發管道。如果正確配置了 Web hook 觸發器,這將自動啟動管道。

或者,您只需點擊“立即建置”即可執行管道。

如果一切都按預期配置,您將得到以下輸出:

圖片描述

結論

我們現在已經結束了這個專案的第一部分。在第一部分中,我們配置並設定了持續整合管道。第二部分將涉及使用 ArgoCD 實施 GitOps。

我們將使用 terraform 配置 EKS 集群,然後使用 ArgoCD 持續部署到 EKS 集群。

這裡的想法是,您可以讓單獨的團隊管理流程的兩個部分 - 持續整合和持續部署。從而進一步解耦和簡化整個過程,同時使用 Git 作為我們的單一事實來源。

PS:我願意接受遠距 DevOps、雲端和科技寫作機會。

LinkedIn上與我聯絡。


原文出處:https://dev.to/kelvinskell/advanced-end-to-end-devops-project-deploying-a-microservices-app-to-aws-eks-using-terraform-helm-jenkins-and-argocd-part-i-3a53


共有 0 則留言