Terraform + Gitlab CI简单集成方案

简介: 利用Gitlab CI实现基础设施编排自动化,用户后续针对基础设施的管理使用Gitlab完成,提交基础设施变更后,会出发pr进行Gitlab CI流水线执行,从而实现基础设施DevOPS流程。

一 背景
利用Gitlab CI实现基础设施编排自动化,用户后续针对基础设施的管理使用Gitlab完成,提交基础设施变更后,会出发pr进行Gitlab CI流水线执行,从而实现基础设施DevOPS流程。
二 流程架构
2.1 架构图

2.2 流程
运维研发编写目标云的基于Terraform的资源清单文件,同事项目内管理Gitlab CI流程,在K8s不同NS下注册有对应的runner,当在不同分支下可以触发不同ns下的CI流程。

开发或运维人员提交代码。
部署在对应名称空间下的runner执行流程,创建运行单个Stage的POD来运行Terraform对应命令,例如init/fmt/play/apply等。
如果要对云上资源进行变更,修改代码,再次提交pr,出发更新流水线。
如果需要销毁,根据CI文件配置提交BUILD为destroy,触发云上销毁动作。

三 预置条件

Gitlab 服务器
注册有项目的gitlab-runner
K8s集群
腾讯云AK账号

四 配置
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/*
AI 代码解读

stages:

  • init
  • validate
  • plan
  • deploy

Init:
image:

name: hashicorp/terraform:0.14.0
entrypoint: [""]
AI 代码解读

stage: init
retry:

max: 2
when:
  - script_failure
AI 代码解读

tags:

- gitlab-runner-k8s-new
AI 代码解读

script:

- terraform version
- terraform init -backend-config=${BACKEND_CONF}
AI 代码解读

only:

- dev
AI 代码解读

Validate:
image:

name: hashicorp/terraform:0.14.0
entrypoint: [""]
AI 代码解读

stage: validate
tags:

- gitlab-runner-k8s-new
AI 代码解读

retry: 2
script:

- terraform init -backend-config=${BACKEND_CONF}
- terraform validate
- terraform fmt -check -recursive || echo 0
AI 代码解读

cache:

paths:
  - ${CI_PROJECT_DIR}/.terraform/*
policy: pull
AI 代码解读

allow_failure: true

Plan:
image:

name: hashicorp/terraform:0.14.0
entrypoint: [""]
AI 代码解读

stage: plan
retry: 2
tags:

- gitlab-runner-k8s-new
AI 代码解读

artifacts:

paths:
  - plan.bin
  - app_config.zip
expire_in: 2 week
AI 代码解读

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}
AI 代码解读

only:

variables:
  - $PHASE == "BUILD"
AI 代码解读

Apply:
image:

name: hashicorp/terraform:0.14.0
entrypoint: [""]
AI 代码解读

when: manual
stage: deploy
retry: 2
tags:

- gitlab-runner-k8s-new
AI 代码解读

script:

- terraform init -backend-config=${BACKEND_CONF}
- terraform apply -auto-approve -input=false plan.bin
AI 代码解读

only:

variables:
  - $PHASE == "BUILD"
AI 代码解读

environment:

name: snunv
AI 代码解读

Destroy:
image:

name: hashicorp/terraform:0.14.0
entrypoint: [""]
AI 代码解读

stage: deploy
retry: 2
tags:

- gitlab-runner-k8s-new
AI 代码解读

script:

- terraform init -backend-config=${BACKEND_CONF}
- terraform destroy -auto-approve -var region=${REGION}
AI 代码解读

only:

variables:
  - $PHASE == "DESTROY"
AI 代码解读

4.1.2 环境配置
利用Gitlab CI/CD的Environment进行环境管理。

4.2 Terraform资源
provider "tencentcloud" {
region = var.region
}

terraform {
required_providers {

tencentcloud = {
  source  = "registry.terraform.io/tencentcloudstack/tencentcloud"
  version = ">=1.61.5"
}
AI 代码解读

}
backend "cos" {}
}

输入变量

variable "region" {
type = string
}

再次仅为一个查询示例

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[*]
AI 代码解读

}
}

为了terraform后端backend安全,将其存储为单独文件,可不同分支或环境进行修改
region = "ap-beijing"
bucket = "tfproject-1253329830"
prefix = "samxxxxitlab/dexxxxxt"

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
0
0
0
206
分享
相关文章
Docker与Kubernetes集成挑战及方案
面对这些挑战,并不存在一键解决方案。如同搭建灌溉系统需要考虑多种因素,集成Docker与Kubernetes也需要深思熟虑的规划、相当的技术知识和不断的调试。只有这样,才能建立起一个稳定、健康、高效的Docker-Kubernetes生态,让你的应用像花园中的植物一样繁荣生长。
121 63
容器化AI模型的持续集成与持续交付(CI/CD):自动化模型更新与部署
在前几篇文章中,我们探讨了容器化AI模型的部署、监控、弹性伸缩及安全防护。为加速模型迭代以适应新数据和业务需求,需实现容器化AI模型的持续集成与持续交付(CI/CD)。CI/CD通过自动化构建、测试和部署流程,提高模型更新速度和质量,降低部署风险,增强团队协作。使用Jenkins和Kubernetes可构建高效CI/CD流水线,自动化模型开发和部署,确保环境一致性并提升整体效率。
Dify-Plus:企业级AI管理核弹!开源方案吊打SaaS,额度+密钥+鉴权系统全面集成
Dify-Plus 是基于 Dify 二次开发的企业级增强版项目,新增用户额度、密钥管理、Web 登录鉴权等功能,优化权限管理,适合企业场景使用。
629 3
Dify-Plus:企业级AI管理核弹!开源方案吊打SaaS,额度+密钥+鉴权系统全面集成
jenkins结合gitlab实现CI(持续集成)
通过本文的介绍,我们详细了解了如何结合Jenkins和GitLab实现持续集成。从环境准备、插件配置到Pipeline任务创建和CI流程监控,每一步都提供了详细的操作步骤和示例代码。希望本文能帮助开发者快速搭建起高效的CI系统,提高项目开发效率和代码质量。
331 8
企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析
DeepSeek R1 是一款先进的大规模深度学习模型,专为自然语言处理等复杂任务设计。它具备高效的架构、强大的泛化能力和优化的参数管理,适用于文本生成、智能问答、代码生成和数据分析等领域。阿里云平台提供了高性能计算资源、合规与数据安全、低延迟覆盖和成本效益等优势,支持用户便捷部署和调用 DeepSeek R1 模型,确保快速响应和稳定服务。通过阿里云百炼模型服务,用户可以轻松体验满血版 DeepSeek R1,并享受免费试用和灵活的API调用方式。
368 12
方案实践测评 | DataWorks集成Hologres构建一站式高性能的OLAP数据分析
DataWorks在任务开发便捷性、任务运行速度、产品使用门槛等方面都表现出色。在数据处理场景方面仍有改进和扩展的空间,通过引入更多的智能技术、扩展数据源支持、优化任务调度和可视化功能以及提升团队协作效率,DataWorks将能够为企业提供更全面、更高效的数据处理解决方案。
Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用
本文探讨了Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用。首先介绍了CI/CD的基本概念,接着阐述了Docker在环境一致性、快速部署、资源隔离和轻量化方面的优势。文章还详细讨论了构建、测试和部署阶段的具体集成方法,以及集成后带来的效率提升、可靠性增强、加速交付和易于管理等好处。最后,通过案例分析展示了集成的实际效果,强调了Docker与CI/CD结合的重要性和未来前景。
123 2
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分
随着软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分。本文以电商公司为例,介绍如何使用 Jenkins 自动发布 Java 代码,包括安装配置、构建脚本编写及自动化部署等步骤,帮助团队实现高效稳定的软件交付。
89 3
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问