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部署微服務應用程式,包括資料庫和入口元件。
- 第 1 步:設定 EC2 執行個體
克隆Git 儲存庫。
cd
進入 terraform 目錄。
執行terraform init
,然後執行terraform plan
以查看建議的基礎架構變更。
執行terraform apply
來實作這些變更並配置實例。
此實例使用使用者資料進行引導,一旦配置完畢,將自動安裝 jenkins、sonarqube、trivy 和 docker。
- 步驟2:修改應用程式程式碼
這是一個簡單但關鍵的步驟。在您剛剛複製的儲存庫中包含的Jenkinsfile中,您必須將所有出現的「 kelvinskell 」變更為您的 DockerHub 使用者名稱。如果您想自己實施這個專案,這是非常有必要的。
- 第 3 步:設定 Jenkins 伺服器
安裝建議的插件並完成註冊。
前往“管理Jenkins”、“插件”,然後安裝以下插件:Docker、Docker Commons、Docker pipeline、SonarQube Scanner、Sonar 品質門、SSH2 Easy、OWASP 依賴項檢查、OWASP Markup Formatter 插件、GitHub API pluin 和GitHub pipeline插件。
git安裝
聲納掃描器安裝
依賴性檢查
Docker安裝
- 第 4 步:配置 SonarQube
預設使用者名稱和密碼是“admin”。
登入後,按一下“手動”。
請按照上圖中的說明操作,然後按一下「設定」。
注意:您的專案金鑰必須完全是newsread-microservices-application 。這樣,您就不必編輯 Jenkinsfile。
為其命名並點擊“生成”。
前往“管理 Jenkins”>“憑證”
選擇 Secret tex 並貼上您剛剛複製的令牌。
現在前往 Jenkins 儀表板 > 設定 Jenkins > 系統 > Sonarqube 伺服器 > 新增 Sonarqube
將其命名為“SonarQube Server”,輸入秘密令牌的伺服器 URL 和憑證 ID。
請注意,我們的伺服器 url 是 localhost,因為 SonarQube 與 jenkins 託管在同一台伺服器上。
- 第 5 步:整合您的 DockerHub 憑證
此階段對於 Jenkins 存取您的 DockerHub 帳戶至關重要。
- 第 6 步:設定 Jenkins 管道
在「身份驗證令牌」方塊下設定秘密令牌。我們將在建立 GitHub Webhook 時使用它。
在管道下,確保參數設定如下:
定義:來自 SCM 的管道腳本
SCM:設定您的 SCM。確保只建立您的主分支。例如,如果您的主分支名為“main”,請將“*/main”放在要建置的分支下。
腳本路徑:Jenkinsfile
注意:您必須將我的儲存庫分叉到您自己的 GitHub 帳戶。這是您存取儲存庫並能夠對其進行配置所必需的。
完成此操作後,建立 GitHub 個人存取權杖。
我們將使用 GitHub PAT 從 Jenkins 向我們的儲存庫進行身份驗證。
錯誤訊息現已消失。
- 第 7 步:建立 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上與我聯絡。