YAML流水线执行Terraform Init无法定位相对路径引用的模块
Terraform YAML流水线无法找到模块目录问题解决方案
核心排查步骤
- 第一步:排查实际文件目录结构
绝大多数路径错误都是解压后制品的目录结构和预期不符导致,你可以在两个ExtractFiles任务之后、TerraformInstaller任务之前添加以下bash任务,打印完整目录结构确认路径:
运行流水线后查看该任务输出,确认- bash: | echo "=== 完整工作目录结构 ===" find $(System.DefaultWorkingDirectory) -print | sort echo "=== 所有.tf文件路径 ===" find $(System.DefaultWorkingDirectory) -name "*.tf" -type f | sort displayName: 排查目录结构Modules文件夹的实际路径,以及你TF配置所在的$(tf.path)路径的相对位置。 - 第二步:检查大小写敏感问题
你当前使用的是ubuntu-latest代理,Linux系统对文件路径大小写敏感,而经典发布模式如果使用Windows代理不会校验大小写。比如错误日志中同时出现Global-Vars和global-vars的路径引用,需要确认实际文件夹名称和TF配置中引用的名称大小写完全一致。 - 第三步:修复变量引用错误
你在Terraform任务的参数中错误引用了变量$(app.name),但你定义的变量名为app_name,需要将所有$(app.name)替换为$(app_name),避免变量解析异常引发的连锁问题。
常见解决方案
- 调整Modules解压路径
如果打印出的Modules实际路径为$(System.DefaultWorkingDirectory)/drop/Modules,说明下载的Modules制品zip包根目录自带了一层drop文件夹,你可以修改ExtractFiles任务的目标路径,直接将Modules解压到工作目录根目录:- task: ExtractFiles@1 inputs: archiveFilePatterns: 'Modules/drop.zip' destinationFolder: '$(System.DefaultWorkingDirectory)/Modules' cleanDestinationFolder: true overwriteExistingFiles: true - 匹配TF模块引用路径
确认Modules实际路径后,调整TF配置中的相对路径即可:- 如果Modules和
IT Dashboard文件夹同级(即路径为$(System.DefaultWorkingDirectory)/Modules),保持引用../Modules/xxx即可 - 如果Modules放在
IT Dashboard文件夹内(即路径为$(System.DefaultWorkingDirectory)/IT Dashboard/Modules),将引用改为./Modules/xxx
- 如果Modules和
- 强制对齐路径(快速验证)
如果不想调整TF配置,可以在解压后添加一步移动目录的任务,强制将Modules放到预期路径:- bash: | # 请将下面的源路径替换为你打印任务中查到的实际Modules路径 mv $(System.DefaultWorkingDirectory)/drop/Modules $(System.DefaultWorkingDirectory)/Modules displayName: 对齐Modules目录路径
内容的提问来源于stack exchange,提问作者Ken501
相关产品推荐
相关产品推荐

