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

GitHub Environment下terraform plan与apply间人工审批配置方法

实现方案

你现在的配置没法实现需求的核心原因是:GitHub Environment的人工审批规则是在绑定该环境的Job启动时触发,你把plan和apply放在同一个绑定了testing环境的Job里,工作流一触发就会先弹审批,此时plan步骤还没执行,根本看不到变更结果。
正确的实现思路是拆分Job,让无需审批的plan阶段先执行输出结果,再触发绑定了审批环境的apply阶段,具体操作如下:

配置步骤

  • 拆分原有单Job为两个独立Job
    1. terraform-plan:负责执行代码拉取、工具安装、AWS鉴权、init、plan操作,不绑定需要审批的environment,代码推送到test分支后自动执行,同时把plan结果打印到日志、把生成的tfplan文件上传为工作流产物留存,避免后续apply阶段重新计算plan导致和审批看到的结果不一致。
    2. terraform-apply:仅负责执行apply操作,绑定testing环境,配置依赖terraform-plan Job,只有plan Job执行成功后才会启动,启动时自动触发testing环境的人工审批流程。
  • 配置Environment审批规则
    进入仓库Settings > Environments > 选中testing环境,开启Required reviewers规则,添加有权限审批的人员名单保存即可,不需要额外安装第三方审批插件,用GitHub原生能力就能实现。
  • 修正原有工作流的语法问题
    原配置存在缩进错误、continue-on-error写法错误,以及plan命令把输出全重定向到/dev/null的问题——必须保留plan输出到日志,才能在审批前核查变更内容。

修正后的完整工作流配置

name: Testing Environment

on:
  push:
    branches:
      - test

jobs:
  terraform-plan:
    name: "Terragrunt Init & Plan"
    runs-on: ubuntu-20.04
    # plan阶段不绑定审批环境,自动执行
    defaults:
      run:
        working-directory: ${{ env.TERRAFORM_WORKING_DIR }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v1.3.2
        with:
          terraform_version: ${{ env.TERRAFORM_VERSION }}
          terraform_wrapper: true

      - name: Setup Terragrunt
        uses: autero1/action-terragrunt@v1.1.0
        with:
          terragrunt_version: ${{ env.TERRAGRUNT_VERSION }}

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1.6.1
        with:
          aws-region: us-east-1
          role-to-assume: ${{ env.ORCHESTRATION_ROLE_ARN }}

      - name: Terragrunt Init
        id: init
        run: terragrunt run-all init -no-color --terragrunt-non-interactive

      - name: Terragrunt Plan
        id: plan
        # 去掉原配置的>/dev/null,打印plan结果到日志供审批核查
        run: |
          terragrunt run-all plan -no-color --terragrunt-non-interactive -out=tfplan
        continue-on-error: true

      # 上传tfplan为产物,供apply阶段直接使用,避免配置漂移
      - name: Upload Terraform Plan Artifact
        uses: actions/upload-artifact@v3
        with:
          name: tfplan
          path: ${{ env.TERRAFORM_WORKING_DIR }}/tfplan
          if-no-files-found: error

  terraform-apply:
    name: "Terragrunt Apply (Need Approval)"
    runs-on: ubuntu-20.04
    # 仅apply阶段绑定testing环境,启动时触发人工审批
    environment: testing
    needs: terraform-plan # 强制等待plan阶段执行完成才启动
    defaults:
      run:
        working-directory: ${{ env.TERRAFORM_WORKING_DIR }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v1.3.2
        with:
          terraform_version: ${{ env.TERRAFORM_VERSION }}
          terraform_wrapper: true

      - name: Setup Terragrunt
        uses: autero1/action-terragrunt@v1.1.0
        with:
          terragrunt_version: ${{ env.TERRAGRUNT_VERSION }}

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1.6.1
        with:
          aws-region: us-east-1
          role-to-assume: ${{ env.ORCHESTRATION_ROLE_ARN }}

      - name: Terragrunt Init
        id: init
        run: terragrunt run-all init -no-color --terragrunt-non-interactive

      # 下载plan阶段生成的tfplan文件
      - name: Download Terraform Plan Artifact
        uses: actions/download-artifact@v3
        with:
          name: tfplan
          path: ${{ env.TERRAFORM_WORKING_DIR }}

      - name: Terragrunt Apply
        id: apply
        # 直接使用已核查的tfplan执行部署,保证审批内容和实际部署一致
        run: terragrunt run-all apply -no-color --terragrunt-non-interactive tfplan
        continue-on-error: true

运行效果说明

  • 代码推送到test分支后,plan Job自动启动,跑完init、plan后会把完整的资源变更结果打印到对应步骤的日志中,同时留存tfplan文件。
  • plan Job执行成功后,apply Job进入等待状态,GitHub会自动给配置的审批人发送通知。
  • 审批人进入工作流详情页,先查看plan步骤的输出日志,确认资源变更符合预期后再点击审批通过,apply Job才会开始执行测试环境部署;如果发现plan结果有问题,直接拒绝审批即可终止部署流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:33:29