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

如何在GitHub Actions中运行Terraform文件夹内的.tf文件?

如何在GitHub Actions工作流中指定Terraform文件的文件夹路径?

问题背景

我的GitHub仓库结构如下:

_
 |_ .github/workflows/myworkflow.yaml
 |_ terraform/terraformInFolder.tf
 |_ terraformInRootDir.tf

我通过GitHub Actions工作流执行terraform apply、validate等命令,但目前仅能处理根目录下的.tf文件,无法识别terraform文件夹内的文件。尝试使用with: path:参数,但发现with不能与run指令配合使用。

当前工作流配置:

name: deployment-workflow

on: push
jobs:
  terraform_apply:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1


    - name: Verify Terraform version
      run: terraform --version

    - name: Terraform init
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: terraform init -input=false

    - name: Terraform validation
      run: terraform validate

    - name: Terraform apply
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: terraform apply -auto-approve -input=false 

解决方案

方法1:使用Terraform全局参数-chdir(推荐,Terraform 0.14+支持)

Terraform 0.14及以上版本支持-chdir全局参数,可直接指定Terraform的工作目录,无需切换shell路径。修改后的工作流如下:

name: deployment-workflow

on: push
jobs:
  terraform_apply:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1

    - name: Verify Terraform version
      run: terraform --version

    - name: Terraform init
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: terraform -chdir=terraform init -input=false

    - name: Terraform validation
      run: terraform -chdir=terraform validate

    - name: Terraform apply
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: terraform -chdir=terraform apply -auto-approve -input=false 

方法2:使用GitHub Actions的working-directory字段

GitHub Actions支持在步骤中通过working-directory指定命令的执行目录,比手动cd更简洁:

name: deployment-workflow

on: push
jobs:
  terraform_apply:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1

    - name: Verify Terraform version
      run: terraform --version

    - name: Terraform init
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: terraform init -input=false
      working-directory: terraform

    - name: Terraform validation
      run: terraform validate
      working-directory: terraform

    - name: Terraform apply
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: terraform apply -auto-approve -input=false 
      working-directory: terraform

方法3:手动切换目录(兼容旧版本Terraform)

如果你的Terraform版本低于0.14,可以在run指令中用cd切换目录后执行命令:

name: deployment-workflow

on: push
jobs:
  terraform_apply:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1

    - name: Verify Terraform version
      run: terraform --version

    - name: Terraform init
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: cd terraform && terraform init -input=false

    - name: Terraform validation
      run: cd terraform && terraform validate

    - name: Terraform apply
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: cd terraform && terraform apply -auto-approve -input=false 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:05:17