如何在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
相关产品推荐
相关产品推荐

