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

Azure DevOps首个Terraform YAML流水线仅首个仓库运行问题求助

问题原因

你的流水线仅对terraform-azurerm-module-name这一个目录执行了Terraform操作,其余三个仓库的代码从未被Terraform调用,自然不会产生输出。
Terraform单次命令仅对指定的单个工作目录生效,你在terraform init和terraform plan两个任务中,都将workingDirectory固定写死为$(System.DefaultWorkingDirectory)/terraform-azurerm-module-name,相当于只指示Terraform运行NameRepo下的配置。其余三个仓库对应的本地目录既没有执行init初始化,也没有执行plan,自然不会触发代码逻辑,也不会输出你定义的rg_module_debug这类值。
如果其他三个仓库是作为子模块被NameRepo引用的,还需要检查NameRepo中module块的源路径配置是否正确:Azure DevOps checkout多仓库时,非当前仓库的代码默认会存放在$(System.DefaultWorkingDirectory)下与仓库标识符同名的文件夹中,路径配置错误会导致Terraform根本找不到对应模块,自然不会执行模块内的逻辑。

修复方法

根据你的模块运行逻辑二选一即可:

  • 四个仓库为独立Terraform项目,需单独执行:为每个仓库对应的目录单独配置init和plan步骤,示例(ResourceGrpRepo为例,其余两个仓库替换对应目录路径即可):
- task: TerraformCLI@0
  displayName: 'terraform init - 资源组模块'
  inputs:
    provider: 'azurerm'
    command: 'init'
    workingDirectory: '$(System.DefaultWorkingDirectory)/terraform-azurerm-module-resource_group'

- task: TerraformCLI@0
  displayName: 'terraform plan - 资源组模块'
  inputs:
    provider: 'azurerm'
    command: 'plan'
    workingDirectory: '$(System.DefaultWorkingDirectory)/terraform-azurerm-module-resource_group'

模块数量较多时,可以用bash脚本批量遍历执行,避免重复配置:

- bash: |
    for module_dir in $(System.DefaultWorkingDirectory)/terraform-azurerm-module-*/; do
      echo "处理目录: $module_dir"
      terraform -chdir=$module_dir init
      terraform -chdir=$module_dir plan
    done
  displayName: '批量执行所有模块Terraform操作'
  • 其余三个仓库是NameRepo的依赖子模块:不需要给三个子模块单独加执行步骤,只需要修正NameRepo中module块的源路径,指向checkout后对应的本地相对路径即可。Terraform在初始化NameRepo时会自动读取子模块内容,plan时会执行所有子模块的逻辑,对应输出也会正常打印。
补充说明

目前配置中注释掉了environmentServiceName参数,如果后续要执行terraform apply实际创建Azure资源,必须配置正确的Azure RM服务连接,否则会出现API调用权限错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:03:17