如何将 Terraform 状态集成到 github 动作工作流中?

How to integrate terraform state into github action workflow?

我有 github 操作工作流概述了启动 Terraform 以在 Azure 中创建资源的简单过程。我缺少的是如何集成 terraform 状态文件,以便在此工作流的顺序 运行 中,它应该将当前状态与 main.tf 文件进行比较,并且只允许净更改。目前如果我运行这个顺序,第二次总是会失败,因为资源已经在Azure中创建了。

如何配置下面的 github 工作流程以允许进行 Terraform 状态文件比较?我还没有找到执行此操作的单一来源

github 回购布局:

github 操作流程:

name: Terraform deploy to Azur

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
    - name: "Checkout"
      uses: actions/checkout@master
      
    - name: "Terraform Init"
      uses: hashicorp/terraform-github-actions@master
      with:
       tf_actions_version: 0.12.13
       tf_actions_subcommand: "init"

    - name: "Terraform Plan"
      uses: hashicorp/terraform-github-actions@master
      with:
       tf_actions_version: 0.12.13
       tf_actions_subcommand: "plan"
       args: -var="client_secret=${{ secrets.clientSecret }}"
             -var="client_id=${{ secrets.clientId }}"
             -var="tenant_id=${{ secrets.tenantId }}"
             -var="sub=${{ secrets.sub }}"
                  
    - name: "Terraform Apply"
      uses: hashicorp/terraform-github-actions@master
      with:
       tf_actions_version: 0.12.13
       tf_actions_subcommand: "apply"
       args: -var="client_secret=${{ secrets.clientSecret }}"
             -var="client_id=${{ secrets.clientId }}"
             -var="tenant_id=${{ secrets.tenantId }}"
             -var="sub=${{ secrets.sub }}"    

您需要 add a backend configuration 到您的 Terraform,以便它将状态文件存储在外部某处,它可以在每个 运行.

上引用和更新

当 运行 在管道中时,比将后端配置存储在其他地方更好的解决方案是在 terraform init:

之前动态生成后端配置
    - name: Setup Terraform Backend
      id: backend
      run: |
        cat > backend.tf << EOF
        terraform {
          backend "remote" {
            organization = "${secrets.TF_CLOUD_ORGANIZATION}"

            workspaces {
              name = "${secrets.TF_CLOUD_WORKSPACE}"
            }
          }
        }
        EOF

    - name: Terraform Init
      id: init
      run: terraform init