Azure DevOps流水线无法下载Terraform子模块的问题咨询
解决Azure DevOps流水线无法拉取Terraform子模块的问题
核心问题定位
流水线初始Git拉取任务默认带--no-recurse-submodules参数,导致子模块未被拉取——这才是问题根源。你之前添加的-get=true是Terraform用于拉取Terraform Registry远程模块的参数,对Git子模块完全无效,所以没起到作用。
具体解决步骤
1. 修改Git拉取任务,开启子模块拉取
在Azure DevOps YAML流水线中,显式配置checkout步骤,替换默认的无递归拉取行为:
steps: - checkout: self submodules: true # 拉取一级子模块,若嵌套子模块需改用"recursive" fetchDepth: 0 # 可选:若子模块需要完整提交历史,取消深度限制
这个配置会让Git自动拉取仓库关联的所有指定子模块内容。
2. 调整CopyFiles任务,确保子模块文件被复制到制品
如果你的CopyFiles任务仅复制根目录文件,需修改参数覆盖子模块目录:
- task: CopyFiles@2 inputs: sourceFolder: '$(Build.SourcesDirectory)' contents: | **/* # 复制所有文件,包含子模块目录下的内容 targetFolder: '$(Build.ArtifactStagingDirectory)'
这样就能把根目录和所有子模块的文件同步到制品目录中。
3. 简化Terraform Init配置(可选)
Git拉取完子模块后,Terraform会自动识别本地模块路径,无需额外添加-get=true参数。若子模块是远程Git模块,确保main.tf中的模块引用路径正确即可。
内容的提问来源于stack exchange,提问作者Ian Carrick
相关产品推荐
相关产品推荐

