脚本之家

电脑版
提示:原网页已由神马搜索转码, 内容由www.jb51.net提供.
您的位置:首页网络编程其它综合→ Terraform集成Gitlab CI

Terraform集成简单Gitlab CI方案详解

  更新时间:2022年07月05日 12:16:53  作者:kaliarch 
这篇文章主要为大家介绍了Terraform + Gitlab CI简单集成方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

一 背景

利用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/*
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 环境配置

利用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"
}
}
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[*]
}
}

为了terraform后端backend安全,将其存储为单独文件,可不同分支或环境进行修改

region = "ap-beijing"
bucket = "tfproject-1253329830"
prefix = "samxxxxitlab/dexxxxxt"

五 测试

  • init

  • validate

  • Plan

  • 手动应用apply

查看应用创建出的vpc

  • 制品下载

  • 销毁

修改gitlabci文件,销毁

六 注意事项

  • 需要K8s集群配置pv存储卷来实现跨stage的任务cache。
  • 使用gitlab ci 环境管理来对执行ci/cd的人员隐藏密钥信息。
  • 后期可以使用gitlab 来进行变量管理。

本文仅实现简单的Terraform + Gitlab CI 基础设施编排集成,未将Gitlab CI的配置文件进行抽离模版化,未与Ansible进行集成实施配置管理。

以上就是Terraform集成简单Gitlab CI方案详解的详细内容,更多关于Terraform集成Gitlab CI的资料请关注脚本之家其它相关文章!

相关文章

    • 这篇文章主要介绍了解决使用IDE Run运行出错package pack/test is not in GOROOT (/usr/local/go/src/pack/test),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
      2020-11-11
    • 今天想清除目录下的SVN信息,在网上找了找,说是有三种方法
      2012-03-03
    • listary是 windows 下一款可以快速搜索所有程序、文件,并且可以快速启动程序和打开相应文件的优秀的搜索软件,绝对比系统自带搜索速度快很多,而且查询功能丰富,本文给大家分享Listary v5.00.2843注册码,感兴趣的朋友一起看看吧
      2022-07-07
    • 这篇文章主要给大家总结介绍了关于Eclipse插件安装的八种方式,现在开发java项目普遍使用idea了,但使用eclipse的也不少,如果要用的顺手点,还是需要一些优化和相关插件支持的,需要的朋友可以参考下
      2023-10-10
    • 我们可以对邮件多尝试几次发送,如果实在不行那就过一会再发送邮件。
      2009-06-06
    • 这篇文章主要介绍了最新IDEA永久激活教程,此教程已支持最新2019.2版本,适用Windows、Mac、Ubuntu等所有平台,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
      2020-05-05
    • 这篇文章主要介绍了数据分析2020年全国各省高考成绩分布情况,顺便可以用这个数据看每个省市的一本线划分比率,还有其他相关的数据,需要的朋友可以参考下
      2020-07-07
    • 这篇文章主要为大家介绍了Ceph集群CephFS文件存储核心概念及部署使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
      2022-10-10
    • 这篇文章主要介绍了VSCode远程SSH免密登录配置实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
      2021-04-04
    • 这篇文章主要为大家介绍了CommonLisp中解析命令行参数示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
      2022-08-08

    最新评论