You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform多分支与CircleCI配置:不使用工作区实现方案咨询

无需Terraform Workspaces,用分支+CircleCI实现多环境管理

完全可以做到。核心思路是用分支对应环境,通过CircleCI针对不同分支执行独立的Terraform流程,同时用独立的状态文件和变量文件实现环境隔离,完全绕开Terraform Workspaces。

1. 分支策略

给每个环境分配专属分支:

  • main:生产环境
  • staging:预发布环境
  • feature/xxx:临时测试分支(比如新功能验证)

每个分支共享核心Terraform代码,通过不同的配置文件区分环境。

2. CircleCI 流水线配置

创建.circleci/config.yml,针对不同分支触发对应的Terraform操作(init/plan/apply),示例如下:

version: 2.1

jobs:
  terraform-init-plan:
    docker:
      - image: hashicorp/terraform:latest
    steps:
      - checkout
      - run:
          name: 初始化Terraform(指定分支专属后端配置)
          command: terraform init -backend-config="backend-${CIRCLE_BRANCH}.tfvars"
      - run:
          name: 生成执行计划(加载分支专属变量)
          command: terraform plan -var-file="vars-${CIRCLE_BRANCH}.tfvars"

  terraform-apply:
    docker:
      - image: hashicorp/terraform:latest
    steps:
      - checkout
      - run:
          name: 初始化Terraform
          command: terraform init -backend-config="backend-${CIRCLE_BRANCH}.tfvars"
      - run:
          name: 执行资源部署
          command: terraform apply -auto-approve -var-file="vars-${CIRCLE_BRANCH}.tfvars"

workflows:
  plan-and-deploy:
    jobs:
      - terraform-init-plan:
          filters:
            branches:
              only: [main, staging, feature/*]
      - terraform-apply:
          requires: [terraform-init-plan]
          filters:
            branches:
              only: [main, staging] # 生产/预发自动执行apply,测试分支可手动触发

3. 状态文件隔离(核心)

不用Workspaces,而是给每个分支配置独立的状态存储路径。以S3后端为例,创建分支专属的后端配置文件:

  • backend-main.tfvars(生产环境):
bucket = "my-terraform-state-bucket"
key    = "terraform/state/main/terraform.tfstate"
region = "us-east-1"
  • backend-staging.tfvars(预发布环境):
bucket = "my-terraform-state-bucket"
key    = "terraform/state/staging/terraform.tfstate"
region = "us-east-1"

这样每个分支的状态完全独立,不会出现环境资源互相覆盖的问题。

4. 环境变量区分

创建分支专属的变量文件,定义不同环境的参数:

  • vars-main.tfvars:
instance_type = "t3.large"
instance_count = 3
domain_name = "prod.example.com"
  • vars-staging.tfvars:
instance_type = "t3.medium"
instance_count = 2
domain_name = "staging.example.com"

5. 关键注意事项

  • 权限管控:限制main分支的合并权限,只有授权人员能操作生产环境;
  • 敏感信息:AWS密钥、API令牌等敏感数据存在CircleCI项目的环境变量中,不要硬编码到配置文件;
  • 分支清理:测试分支合并后,记得手动执行terraform destroy清理资源,并删除对应的状态文件,避免资源浪费。

内容的提问来源于stack exchange,提问作者wallace84

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:48:21