首页/开发/CI/CD 与发布速查/CI 中的 terraform plan 门禁
环境与配置管理60 条

CI 中的 terraform plan 门禁

把 plan 作为变更评审的核心证据:-detailed-exitcode 区分「无变化/有变化/错误」,有变化时评审计划再执行。

CI/CD 与发布速查开发更新于 2026-10-13

plan 门禁是什么

把 terraform plan 放进 PR 流水线,作为基础设施变更评审的核心证据:-detailed-exitcode 把状态区分为无变化、有变化、出错三种退出码,有变化时把计划附到合并请求供评审,合并后用受限凭据执行同一份保存的计划。核心原则是:评审什么就执行什么,plan 与 apply 之间不重新计算。

基本信息

适用平台Terraform / OpenTofu 与环境流水线(CI)
退出码0 无差异、1 出错、2 有差异(需要处理)
流程PR 阶段用只读凭据跑 plan;合并后用受限凭据 apply 同一计划
输出计划文本存为 CI 制品,供评审与留档

典型使用场景

  • 基础设施变更评审:创建、修改、销毁的具体对象先看到再批准
  • 环境分级:开发环境检查通过即应用,生产环境人工批准后应用
  • 重建演练:用计划验证重建操作的差异面,提前发现缺口
  • 合规留档:计划文件与批准记录留存备查
  • 变更可视化:把新增、修改、销毁的计数贴到合并请求首屏,评审人先看影响面
  • 与漂移检测联动:计划暴露意外差异时先查来源,而不是直接批准覆盖

命令

命令
terraform init -input=false
terraform plan -detailed-exitcode -out=tfplan  # 0 无差异、2 有差异、1 出错
# 有差异时把计划输出附到合并请求供评审
terraform apply -input=false tfplan  # 校验计划未过期后直接执行
读计划能力要培养:评审人至少关注「替换与销毁的资源数量与对象」,而不是只看有没有报错。
凭据按阶段拆:plan 用只读凭据、apply 用受限写凭据,两者都用短期凭据,别把长期密钥放进 CI 变量。
大型环境计划太慢时按模块或工作区拆分流水线,并缓存插件与提供者下载,能显著缩短等待。

易错点

  • apply 时重新 plan:执行的可能不是评审过的内容,必须使用保存的计划文件
  • CI 凭据权限过大:plan 阶段就能改基础设施,按阶段拆分权限
  • 计划产物不设保留:合并窗口内找不到评审依据,制品保留要覆盖完整流程
  • plan 与 apply 指向不同目录或变量:对比的是另一个环境,参数化要显式且单独校验
  • 提供者版本漂移制造计划噪声:升级后全量差异,先独立提交锁定版本再跑业务变更
  • 计划输出泄漏敏感值:标记敏感字段并控制报告可见范围,计划文本对外粘贴前先脱敏

数据来源与参考

  • Terraform 文档《plan 命令》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌