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