Azure DevOps流水线中Terraform无法识别已创建文件的问题
问题排查与解决方案
错误原因
Azure DevOps中每个Job(包括不同Stage的Job)会使用独立的工作目录,路径里/home/vsts/work/1/s/中的1是当前Job的运行编号,每个Job的编号递增且独立——Stage1的Job用的是1,而DeployTerraform阶段的Job会使用另一个编号(比如2),你在Terraform中硬写固定绝对路径/home/vsts/work/1/s/myfolder/myfile.txt,在Deploy阶段必然找不到文件。本地环境因为始终是同一个工作目录,固定路径能生效,但流水线跨Job场景不适用。
解决方案
方法1:通过Terraform变量传递动态路径
- 在Terraform代码中定义变量:
variable "local_file_path" { type = string } resource "databricks_file" "my_file" { source = var.local_file_path path = "/Volumes/my_catalog/my_schema/my_volume/myfile.txt" }
- 修改流水线的AzureCLI任务,传入当前Job的实际文件路径:
- task: AzureCLI@2 displayName: Apply Terraform inputs: azureSubscription: XXX addSpnToEnvironment: true scriptType: bash scriptLocation: inlineScript workingDirectory: $(Build.Repository.LocalPath)/terraform inlineScript: | # 可选:先验证文件存在 ls -la $(Build.Repository.LocalPath)/myfolder terraform apply -auto-approve -var="local_file_path=$(Build.Repository.LocalPath)/myfolder/myfile.txt"
方法2:使用相对路径
因为Terraform任务的工作目录是$(Build.Repository.LocalPath)/terraform,文件下载在$(Build.Repository.LocalPath)/myfolder,可以用相对路径指向文件:
resource "databricks_file" "my_file" { source = "../myfolder/myfile.txt" path = "/Volumes/my_catalog/my_schema/my_volume/myfile.txt" }
可行性确认
通过流水线工件传递文件,再用Terraform的databricks_file资源部署到Databricks Volume的方式完全可行,核心问题解决后即可正常运行。
内容的提问来源于stack exchange,提问作者limitIntegral314
相关产品推荐
相关产品推荐

