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 变量。
大型环境计划太慢时按模块或工作区拆分流水线,并缓存插件与提供者下载,能显著缩短等待。