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

如何在GitHub Action的Terraform多栈工作流中添加审批环节?

GitHub Workflow实现Terraform多栈顺序部署+Plan后审批流程

完全可以实现你需求的流程——将所有栈整合到单个工作流中,按顺序执行每个栈的Plan,等待人工审批后执行Apply,完成一个栈再启动下一个栈的流程。以下是具体实现方案:

核心实现思路

  • 利用GitHub Actions的环境审批机制,在Plan完成后触发人工审核,批准后才执行Apply
  • 通过**作业依赖(needs关键字)**控制栈的执行顺序:前一个栈的Apply完成后,才启动下一个栈的Plan
  • 将每个栈的流程拆分为两个独立作业:plan-<stack> 生成并保存执行计划,apply-<stack> 依赖Plan作业且绑定审批环境

具体步骤与示例代码

1. 配置GitHub环境与审批规则

在仓库的「Settings → Environments」页面创建目标部署环境(如prod),开启Required reviewers选项,指定需要审批的人员或团队。后续Apply作业绑定该环境时,必须经过指定人员批准才能执行。

2. 编写整合式工作流配置

以下是完整的工作流示例,包含两个栈的顺序部署流程,可根据实际栈数量扩展:

name: Terraform Multi-Stack Deployment
on:
  push:
    branches: [main] # 代码合并到主分支时触发
  workflow_dispatch: # 支持手动触发,可添加自定义参数

env:
  TF_VERSION: "1.5.7" # 指定Terraform版本
  DEPLOY_ENV: "prod" # 绑定已配置审批的环境

jobs:
  # 第一个栈:网络基础设施
  plan-network-stack:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
      
      - name: 初始化Terraform环境
        uses: hashicorp/setup-terraform@v2
        with:
          terraform_version: ${{ env.TF_VERSION }}
      
      - name: Terraform初始化
        working-directory: ./stacks/network
        run: terraform init -backend-config="env=${{ env.DEPLOY_ENV }}"
      
      - name: 生成执行计划
        working-directory: ./stacks/network
        run: terraform plan -out=tfplan
      
      - name: 上传计划文件作为制品
        uses: actions/upload-artifact@v3
        with:
          name: tfplan-network
          path: ./stacks/network/tfplan

  apply-network-stack:
    needs: plan-network-stack # 依赖网络栈的Plan作业完成
    runs-on: ubuntu-latest
    environment: ${{ env.DEPLOY_ENV }} # 触发审批流程
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
      
      - name: 初始化Terraform环境
        uses: hashicorp/setup-terraform@v2
        with:
          terraform_version: ${{ env.TF_VERSION }}
      
      - name: 下载之前生成的执行计划
        uses: actions/download-artifact@v3
        with:
          name: tfplan-network
          path: ./stacks/network
      
      - name: Terraform初始化
        working-directory: ./stacks/network
        run: terraform init -backend-config="env=${{ env.DEPLOY_ENV }}"
      
      - name: 执行Terraform Apply
        working-directory: ./stacks/network
        run: terraform apply tfplan

  # 第二个栈:数据库服务(依赖网络栈的Apply完成)
  plan-db-stack:
    needs: apply-network-stack # 等待网络栈部署完成
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
      
      - name: 初始化Terraform环境
        uses: hashicorp/setup-terraform@v2
        with:
          terraform_version: ${{ env.TF_VERSION }}
      
      - name: Terraform初始化
        working-directory: ./stacks/database
        run: terraform init -backend-config="env=${{ env.DEPLOY_ENV }}"
      
      - name: 生成执行计划
        working-directory: ./stacks/database
        run: terraform plan -out=tfplan
      
      - name: 上传计划文件作为制品
        uses: actions/upload-artifact@v3
        with:
          name: tfplan-db
          path: ./stacks/database/tfplan

  apply-db-stack:
    needs: plan-db-stack
    runs-on: ubuntu-latest
    environment: ${{ env.DEPLOY_ENV }}
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
      
      - name: 初始化Terraform环境
        uses: hashicorp/setup-terraform@v2
        with:
          terraform_version: ${{ env.TF_VERSION }}
      
      - name: 下载执行计划
        uses: actions/download-artifact@v3
        with:
          name: tfplan-db
          path: ./stacks/database
      
      - name: Terraform初始化
        working-directory: ./stacks/database
        run: terraform init -backend-config="env=${{ env.DEPLOY_ENV }}"
      
      - name: 执行Terraform Apply
        working-directory: ./stacks/database
        run: terraform apply tfplan

  # 后续栈以此类推,每个栈的Plan作业依赖前一个栈的Apply作业

关键注意事项

  • 保存执行计划:将Terraform Plan保存为GitHub制品(Artifact),避免审批间隔期间代码变更导致Apply执行的计划与审批内容不一致
  • 作业依赖顺序:通过needs关键字严格控制栈的执行顺序,确保前序基础设施部署完成后再启动后续栈
  • 灵活触发:使用workflow_dispatch事件可手动触发部署,还可添加输入参数指定要部署的栈列表,减少不必要的执行
  • 复用代码:如果栈数量较多,可将Plan/Apply的通用步骤封装为复合动作(Composite Actions),减少配置重复

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:53:15