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

Terraform在Azure DevOps运行时archive_file报目录缺失错误

故障原因

archive_file 数据源的source_dir相对路径解析基准是执行terraform命令时的当前工作目录,而非.tf配置文件自身的存放目录。
本地VS Code环境运行正常,是因为你执行Terraform命令时的工作目录刚好和配置文件所在目录匹配,../BlobToBlobTransferPackage能正确寻址到上级目录的目标文件夹;迁移到Azure DevOps后,Pipeline执行Terraform命令的默认工作目录和本地不一致,原相对路径指向了不存在的位置,触发目录找不到的报错。

修复方案

优先选第一种,一劳永逸解决跨环境路径问题:

  • 使用Terraform内置的path.module常量拼接路径,这是官方推荐的跨环境兼容写法,路径解析完全不依赖执行命令时的工作目录。修改后的archive_file配置如下:
data "archive_file" "file_function_app" {
  type        = "zip"
  source_dir  = "${path.module}/../BlobToBlobTransferPackage"
  output_path = "${path.module}/blobtoblobtransfer-app.zip"
}

path.module会固定返回当前配置文件所在的绝对路径,无论在哪个目录触发Terraform命令,都能正确定位到目标文件夹。

如果不想修改Terraform配置,可以调整Pipeline配置:

  • 在Azure DevOps的Terraform任务中,显式将工作目录(Working Directory)设置为你本地运行Terraform时对应的配置文件所在目录,保证Pipeline执行命令时的目录上下文和本地完全一致。禁止将工作目录设为仓库根目录,否则原配置中的../会向上遍历到仓库目录之外,必然找不到目标文件夹。
快速排查方法
  • 本地切换到仓库根目录执行terraform plan,如果本地也复现目录不存在的报错,即可100%确认是工作目录差异导致的路径解析问题。
  • 在Azure DevOps Pipeline执行Terraform步骤前,新增一个命令行步骤执行ls -R(Linux代理)或dir /s(Windows代理),打印运行环境的完整目录结构,确认BlobToBlobTransferPackage文件夹的实际存放位置,同时排除代码检出阶段漏拉目标目录的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:15:42