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

如何在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 }}

关键配置说明

  1. 手动触发设置:通过on.workflow_dispatch配置手动触发入口,还可以添加自定义参数(比如部署环境),方便区分不同环境的部署流程。
  2. Plan结果复用:Plan阶段用terraform plan -out=tfplan生成可复用的Plan文件,再通过actions/upload-artifact上传,确保Apply阶段直接使用已验证的Plan结果,避免重复计算。
  3. 审批环节配置:
    • 前往仓库的「Settings」→「Environments」创建对应环境(比如production),在「Required reviewers」中添加需要审批的人员或团队。
    • 在Apply阶段的environment字段指定该环境,Plan完成后工作流会自动暂停,等待审批通过后才会执行Apply。
  4. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:57:59