使用 GitLab 管道部署 Terraform 為管理基礎設施提供了一個安全、無縫的過程,從而實現更快、更高效的部署。
基礎設施即代碼 (IaC) 是現代 DevOps 和敏捷團隊一致、高效地管理云基礎設施并提高彈性的基本實踐。Terraform 已成為 IaC 的領先工具,無論組織規模如何,團隊都可以跨多個提供商配置云基礎設施。借助 Terraform,DevOps 工程師可以使用代碼快速輕松地管理云基礎架構,從而加快部署過程并確保一致性。
除了 Terraform,GitLab 已成為開發人員和 DevOps 工程師進行 CI/CD 管理的熱門選擇。GitLab 與不同工具的廣泛集成可以更好地管理部署過程,使其成為希望簡化 DevOps 工作流程的組織的必備工具。通過利用 Terraform 和 GitLab,組織可以高效且有效地管理其云基礎架構和部署流程,從而改進其整體 DevOps 流程。
GitLab 的優勢
讓我們看看 Terraform 和 GitLab 一起提供的一些優勢,以及如何集成 GiLlab 和 Terraform 以管理云基礎設施的演練。
- Terraform 狀態管理: GitLab 可用于管理您的 Terraform 狀態文件,這有助于確保您的基礎設施得到一致且正確的管理。
- 與其他 GitLab 功能集成:您可以使用 GitLab 的問題跟蹤、項目管理和其他功能來更好地管理您的 Terraform 項目。
- GitOps 原則: 整合 GitOps 部署和基礎架構即代碼 (IaC) 工作流程。
- GitLab 管道: GItlab 提供托管管道功能,無需管理任何專用服務器,如 Jenkins
核心概念
出于演示目的,我們已將 terraform 代碼發布到公共GitLab存儲庫。
地形狀態
Terraform 狀態就像用于基礎設施部署的數據庫。它跟蹤所有由 Terraform 部署和管理的云資源。
使用 GitLab,您可以:
- 對 Terraform 狀態文件進行版本控制。
- 對傳輸中和靜止時的狀態文件進行加密。
- 鎖定和解鎖狀態。
- 遠程執行 terraform plan 和 terraform Apply 命令。
亞搏體育應用程序管道
GitLab 提供 CI/CD 管道,這些管道是在項目存儲庫根目錄中的 gitlab-ci.yml 文件的幫助下定義的。管道功能最初是為應用程序代碼部署而設計的,但現在也廣泛用于管理基礎設施部署。
流水線工作流程
一個典型的管道包括 GitLab 的基于標準合并請求的基礎設施部署工作流
對于所需的任何基礎架構更改,都會從主線分支創建功能分支。完成所需的更改后,將提出合并請求以將更改集成到主線分支中,例如main。
根據此工作流,為來自主分支的基礎設施更改請求創建一個新分支(例如,分支名稱 —
CR1/demo_change_request_for_vpc)。然后對該分支進行必要的更改,并在 GitLab 中提出合并請求以供審查。
一旦 MR 被提升,管道就會被觸發以執行與最近更改的第一級檢查相關的某些地形任務。這是第 1 階段,其中包括:
- Prepare:初始化terraform代碼,下載依賴模塊
- 驗證:使用terraform validate 命令驗證 terraform 源代碼是否存在任何編碼錯誤和不正確的引用
- 計劃:生成一個計劃,描述在觸發地形執行時對現有基礎設施的更改。此步驟有助于評估更改并就是否進一步進行基礎架構更改做出正確的決定
然后將生成的計劃 [文件] 保存為管道工件,以確保在此合并請求獲得批準時應用準確的計劃更改
在審查并批準合并請求后,變更將合并到主分支中,進入管道的第 2 階段,這一次,采用預先生成的計劃并將變更應用到云部署。步驟是
- 獲取計劃文件
- 應用:將計劃的更改應用到基礎架構。這可以是創建或更新操作,可能需要替換某些資源。因此,在批準申請之前仔細評估計劃。
整個工作流程在gitlab-ci.yml 文件中定義。
管道在行動
充分解釋概念并準備好代碼后,下一步是為 AWS 云資源配置設置部署管道。我們將逐步指導如何構建此管道和預期的輸出結果。
連接 AWS 云
您的 AWS 帳戶的憑據可以在變量部分下配置 <提及路徑,例如,設置 -> CI/CD-> 變量(需要屏蔽敏感令牌)
設置 Terraform 狀態后端
GitLab 在 Terraform 的 backend.tf文件中配置為遠程狀態存儲后端。
用于后端配置的 GitLab 項目特定配置在 .gitlab-ci.yml 文件的變量部分中定義。
觸發管道
為了模擬上面解釋的行為,在核心概念部分,
- 從主分支創建一個新分支
- 進行更改,提交并推送代碼
- 在此處創建合并請求并檢查管道執行 → CI/CD → 管道
- 管道成功執行后,可以通過檢查管道日志來檢查生成的計劃
- 打開合并請求并查看代碼更改。
- 根據代碼更改和管道執行信息,如果一切正常,批準合并請求
- 再次監視管道以了解通過主 分支部署的更改的進度
- 當部署管道顯示綠色時,這意味著所有更改都已成功部署,這是個好消息!
- 但是,如果出現問題并且管道顯示失敗,請重新檢查上述步驟以防遺漏任何內容。
清理
gitlab-ci.yml 文件的最后階段包括銷毀 或清理 操作。手動批準后,它會執行 terraform destroy 命令。
- 這是作為一個方便的操作添加的,用于清理作為此博客的一部分創建的資源
- 只需返回任何成功執行的管道并單擊銷毀按鈕
概括
讓我們總結一下整個部署過程及其幫助:
- 安全的代碼管理: GitLab 管道為管理代碼更改提供了一個安全的環境,確保只有授權人員才能進行更改。
- 順暢的基礎設施維護:管道的使用使得維護基礎設施變得更加容易,減少了對額外工具的需求。
- 集成 SCM 和 CI/CD: SCM 與 CI/CD 的集成是無縫的,使管道成為代碼管理過程的自然擴展。
- 簡化的部署過程:減少對本地系統的依賴以安裝任何工具和庫。
- 多功能后端配置:后端配置也可以通過 GitLab 管道進行管理,增加了它們的多功能性。
- 改進協作:一起使用 GitLab 和管道可以改進團隊內部的協作,從而實現更好的代碼管理。
- 強大的社區支持: GitLab 和 Terraform 是廣泛使用的工具,具有強大的社區支持,可在需要時提供資源訪問和幫助。