Terraform集成簡(jiǎn)單Gitlab?CI方案詳解
一 背景
利用Gitlab CI實(shí)現(xiàn)基礎(chǔ)設(shè)施編排自動(dòng)化,用戶后續(xù)針對(duì)基礎(chǔ)設(shè)施的管理使用Gitlab完成,提交基礎(chǔ)設(shè)施變更后,會(huì)出發(fā)pr進(jìn)行Gitlab CI流水線執(zhí)行,從而實(shí)現(xiàn)基礎(chǔ)設(shè)施DevOPS流程。
二 流程架構(gòu)
2.1 架構(gòu)圖
2.2 流程
運(yùn)維研發(fā)編寫目標(biāo)云的基于Terraform的資源清單文件,同事項(xiàng)目?jī)?nèi)管理Gitlab CI流程,在K8s不同NS下注冊(cè)有對(duì)應(yīng)的runner,當(dāng)在不同分支下可以觸發(fā)不同ns下的CI流程。
- 開發(fā)或運(yùn)維人員提交代碼。
- 部署在對(duì)應(yīng)名稱空間下的runner執(zhí)行流程,創(chuàng)建運(yùn)行單個(gè)Stage的POD來(lái)運(yùn)行Terraform對(duì)應(yīng)命令,例如init/fmt/play/apply等。
- 如果要對(duì)云上資源進(jìn)行變更,修改代碼,再次提交pr,出發(fā)更新流水線。
- 如果需要銷毀,根據(jù)CI文件配置提交BUILD為destroy,觸發(fā)云上銷毀動(dòng)作。
三 預(yù)置條件
- Gitlab 服務(wù)器
- 注冊(cè)有項(xiàng)目的gitlab-runner
- K8s集群
- 騰訊云AK賬號(hào)
四 配置
4.1 Gitlab CI配置
4.1.1 .gitlab.yaml
variables: # PHASE: BUILD|DESTROY PHASE: DESTROY # PROXY: http://squiduser:xxzx789@43.134.199.162:3128 # PROXY: http://squiduser:xxzx789@43.154.230.17:3128 REGION: "ap-guangzhou" PLAN_JSON: plan.json BACKEND_CONF: "backend_oss.conf" # before_script: # - apk add --no-cache curl git jq - apk add --no-cache jq - export http_proxy=${SQUID_PROXY} - export https_proxy=${SQUID_PROXY} - export TENCENTCLOUD_SECRET_KEY=${TENCENTCLOUD_SECRET_KEY} - export TENCENTCLOUD_SECRET_ID=${TENCENTCLOUD_SECRET_ID} - export TF_REGISTRY_CLIENT_TIMEOUT=120000 - export CHECKPOINT_TIMEOUT=500000 - export TF_REGISTRY_DISCOVERY_RETRY=5 - alias convert_report="jq -r '([.resource_changes[]?.change.actions?]|flatten)|{\"create\":(map(select(.==\"create\"))|length),\"update\":(map(select(.==\"update\"))|length),\"delete\":(map(select(.==\"delete\"))|length)}'" # 配置緩存 cache: paths: - ${CI_PROJECT_DIR}/.terraform/* stages: - init - validate - plan - deploy Init: image: name: hashicorp/terraform:0.14.0 entrypoint: [""] stage: init retry: max: 2 when: - script_failure tags: - gitlab-runner-k8s-new script: - terraform version - terraform init -backend-config=${BACKEND_CONF} only: - dev Validate: image: name: hashicorp/terraform:0.14.0 entrypoint: [""] stage: validate tags: - gitlab-runner-k8s-new retry: 2 script: - terraform init -backend-config=${BACKEND_CONF} - terraform validate - terraform fmt -check -recursive || echo 0 cache: paths: - ${CI_PROJECT_DIR}/.terraform/* policy: pull allow_failure: true Plan: image: name: hashicorp/terraform:0.14.0 entrypoint: [""] stage: plan retry: 2 tags: - gitlab-runner-k8s-new artifacts: paths: - plan.bin - app_config.zip expire_in: 2 week script: - terraform init -backend-config=${BACKEND_CONF} - terraform plan -input=false -out=plan.bin -var region=${REGION} - terraform show --json "plan.bin" | convert_report > ${PLAN_JSON} - cat ${PLAN_JSON} only: variables: - $PHASE == "BUILD" Apply: image: name: hashicorp/terraform:0.14.0 entrypoint: [""] when: manual stage: deploy retry: 2 tags: - gitlab-runner-k8s-new script: - terraform init -backend-config=${BACKEND_CONF} - terraform apply -auto-approve -input=false plan.bin only: variables: - $PHASE == "BUILD" environment: name: snunv Destroy: image: name: hashicorp/terraform:0.14.0 entrypoint: [""] stage: deploy retry: 2 tags: - gitlab-runner-k8s-new script: - terraform init -backend-config=${BACKEND_CONF} - terraform destroy -auto-approve -var region=${REGION} only: variables: - $PHASE == "DESTROY"
4.1.2 環(huán)境配置
利用Gitlab CI/CD的Environment進(jìn)行環(huán)境管理。
4.2 Terraform資源
provider "tencentcloud" { region = var.region } terraform { required_providers { tencentcloud = { source = "registry.terraform.io/tencentcloudstack/tencentcloud" version = ">=1.61.5" } } backend "cos" {} } # 輸入變量 variable "region" { type = string } # 再次僅為一個(gè)查詢示例 data "tencentcloud_instances" "cvm" { } # 輸出 output "result" { value = { cvm_result = { for k, v in data.tencentcloud_instances.cvm : k => v }, count = data.tencentcloud_instances.cvm.instance_list[*] } }
為了terraform后端backend安全,將其存儲(chǔ)為單獨(dú)文件,可不同分支或環(huán)境進(jìn)行修改
region = "ap-beijing" bucket = "tfproject-1253329830" prefix = "samxxxxitlab/dexxxxxt"
五 測(cè)試
- init
- validate
- Plan
- 手動(dòng)應(yīng)用apply
查看應(yīng)用創(chuàng)建出的vpc
- 制品下載
- 銷毀
修改gitlabci文件,銷毀
六 注意事項(xiàng)
- 需要K8s集群配置pv存儲(chǔ)卷來(lái)實(shí)現(xiàn)跨stage的任務(wù)cache。
- 使用gitlab ci 環(huán)境管理來(lái)對(duì)執(zhí)行ci/cd的人員隱藏密鑰信息。
- 后期可以使用gitlab 來(lái)進(jìn)行變量管理。
本文僅實(shí)現(xiàn)簡(jiǎn)單的Terraform + Gitlab CI 基礎(chǔ)設(shè)施編排集成,未將Gitlab CI的配置文件進(jìn)行抽離模版化,未與Ansible進(jìn)行集成實(shí)施配置管理。
以上就是Terraform集成簡(jiǎn)單Gitlab CI方案詳解的詳細(xì)內(nèi)容,更多關(guān)于Terraform集成Gitlab CI的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決使用IDE Run運(yùn)行出錯(cuò)package pack/test is not in GOROOT (/usr/loca
這篇文章主要介紹了解決使用IDE Run運(yùn)行出錯(cuò)package pack/test is not in GOROOT (/usr/local/go/src/pack/test),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11刪除SVN三種方法delSvn(windows+linux)
今天想清除目錄下的SVN信息,在網(wǎng)上找了找,說(shuō)是有三種方法2012-03-03最新Listary?v5.00.2843注冊(cè)碼?親測(cè)可用
listary是?windows?下一款可以快速搜索所有程序、文件,并且可以快速啟動(dòng)程序和打開相應(yīng)文件的優(yōu)秀的搜索軟件,絕對(duì)比系統(tǒng)自帶搜索速度快很多,而且查詢功能豐富,本文給大家分享Listary?v5.00.2843注冊(cè)碼,感興趣的朋友一起看看吧2022-07-07數(shù)據(jù)分析2020年全國(guó)各省高考成績(jī)分布情況
這篇文章主要介紹了數(shù)據(jù)分析2020年全國(guó)各省高考成績(jī)分布情況,順便可以用這個(gè)數(shù)據(jù)看每個(gè)省市的一本線劃分比率,還有其他相關(guān)的數(shù)據(jù),需要的朋友可以參考下2020-07-07Ceph集群CephFS文件存儲(chǔ)核心概念及部署使用詳解
這篇文章主要為大家介紹了Ceph集群CephFS文件存儲(chǔ)核心概念及部署使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10VSCode遠(yuǎn)程SSH免密登錄配置實(shí)現(xiàn)
這篇文章主要介紹了VSCode遠(yuǎn)程SSH免密登錄配置實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04