如何在GitHub Actions的Terraform Plan与Apply阶段间添加人工审批
在GitHub Actions中为Terraform部署添加人工审批环节
核心实现思路
借助GitHub Actions的**环境审批(Environment Approval)**机制,在Terraform Plan执行完成后,强制要求指定人员/团队完成审批,通过后才会触发Terraform Apply。同时需要将Plan的执行结果保存为工作流产物(Artifact),让Apply阶段可以直接复用该结果,避免重复执行Plan。
完整Workflow示例
name: Terraform Infrastructure Deployment # 通过Workflow Dispatch手动触发,支持指定部署环境参数 on: workflow_dispatch: inputs: environment: description: '目标部署环境' required: true default: 'production' jobs: terraform-plan: name: 执行Terraform Plan runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 初始化Terraform环境 uses: hashicorp/setup-terraform@v3 - name: 配置云服务商凭证(以AWS为例) uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Terraform初始化 run: terraform init - name: 生成Terraform Plan文件 run: terraform plan -out=tfplan env: TF_VAR_environment: ${{ github.event.inputs.environment }} - name: 上传Plan文件作为工作流产物 uses: actions/upload-artifact@v4 with: name: tfplan path: tfplan terraform-apply: name: 执行Terraform Apply runs-on: ubuntu-latest needs: terraform-plan # 依赖Plan阶段成功完成 # 绑定需要审批的环境,触发人工审批环节 environment: name: ${{ github.event.inputs.environment }} steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 初始化Terraform环境 uses: hashicorp/setup-terraform@v3 - name: 配置云服务商凭证(以AWS为例) uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: 下载Plan文件 uses: actions/download-artifact@v4 with: name: tfplan path: . - name: 执行Terraform Apply run: terraform apply tfplan env: TF_VAR_environment: ${{ github.event.inputs.environment }}
关键配置说明
- 手动触发设置:通过
on.workflow_dispatch配置手动触发入口,还可以添加自定义参数(比如部署环境),方便区分不同环境的部署流程。 - Plan结果复用:Plan阶段用
terraform plan -out=tfplan生成可复用的Plan文件,再通过actions/upload-artifact上传,确保Apply阶段直接使用已验证的Plan结果,避免重复计算。 - 审批环节配置:
- 前往仓库的「Settings」→「Environments」创建对应环境(比如production),在「Required reviewers」中添加需要审批的人员或团队。
- 在Apply阶段的
environment字段指定该环境,Plan完成后工作流会自动暂停,等待审批通过后才会执行Apply。
- Job依赖关系:用
needs: terraform-plan确保Apply阶段只会在Plan成功执行完成后,才进入审批等待环节。
常见问题排查
- 审批环节未出现:检查仓库环境设置中是否正确添加了审批人,且Apply阶段的
environment名称与创建的环境名称完全匹配。 - Apply阶段找不到Plan文件:确认Plan阶段的
terraform plan -out=tfplan命令成功生成文件,且上传/下载Artifact的路径一致。 - Plan完成后直接执行Apply:检查Apply阶段是否正确配置了
needs: terraform-plan,确保依赖关系生效。
内容的提问来源于stack exchange,提问作者vamsi vamzy
相关产品推荐
相关产品推荐

