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

如何配置azure-pipeline.yaml实现多子文件夹Terraform资源自动部署

Terraform流水线触发与部署修复方案

项目结构

Azure_Architecture/
├── module/
└── subscription/
    ├── eu-north/
    │   └── platform/
    │       ├── resource_group/
    │       │   ├── provider.tf
    │       │   ├── main.tf
    │       │   ├── variable.tf
    │       │   └── terraform.tfvars
    │       ├── vnets/
    │       │   └── [同resource_group下的四个文件]
    │       └── subnet/
    │           └── [同resource_group下的四个文件]
    └── eu-west/

需求

当任意资源子文件夹(如resource_group、vnets等)中的terraform.tfvars文件被修改时,自动触发流水线完成对应资源的部署。

原脚本问题分析

你提供的流水线脚本无法正常工作,核心问题包括:

  • 触发规则未限定目标文件,导致任意代码变更都会触发流水线
  • 禁用了自动checkout,后续无法正常访问仓库文件
  • Terraform操作未定位到正确的资源文件夹
  • 多个步骤为空,无实际执行逻辑

修正后的完整流水线代码

trigger:
  branches:
    include:
      - main
  paths:
    include:
      - 'Azure_Architecture/subscription/*/platform/**/terraform.tfvars'

pool:
  vmImage: 'ubuntu-latest'

steps:
- checkout: self
  fetchDepth: 2  # 拉取最近两次提交,用于对比文件变更

- script: |
    # 获取本次提交相对于上一次的变更tfvars文件
    changed_files=$(git diff --name-only HEAD~1 HEAD | grep "terraform.tfvars")
    echo "检测到变更的tfvars文件:$changed_files"
    
    # 遍历每个变更文件,执行对应资源的Terraform操作
    for file in $changed_files; do
      # 获取资源文件夹路径
      resource_folder=$(dirname "$file")
      echo "进入资源目录:$(System.DefaultWorkingDirectory)/$resource_folder"
      cd "$(System.DefaultWorkingDirectory)/$resource_folder"
      
      # 初始化Terraform
      terraform init -input=false
      
      # 验证配置文件
      terraform validate
      
      # 生成部署计划并保存
      terraform plan -var-file=terraform.tfvars -out=tfplan
      
      # 执行部署计划
      terraform apply -input=false tfplan
      
      # 返回根目录,处理下一个变更文件
      cd "$(System.DefaultWorkingDirectory)"
    done
  displayName: '批量处理变更的Terraform资源'

关键修改说明

  • 精准触发:通过paths.include指定只有terraform.tfvars文件变更时才触发流水线,避免无效运行
  • 代码拉取优化:启用自动checkout并设置fetchDepth:2,仅拉取必要的提交记录,提升效率
  • 批量处理逻辑:自动检测所有变更的tfvars文件,逐个进入对应资源目录执行完整的Terraflow生命周期操作
  • 无交互执行:添加-input=false参数,确保流水线全程自动运行,无需人工干预
  • 计划一致性:用-out=tfplan保存部署计划,保证apply的内容与plan完全一致,避免部署偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:31:08