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

Azure DevOps发布Terraform Plan失败:plan.out文件路径定位问题

问题:Azure Pipeline发布Terraform Plan文件失败,找不到plan.out路径

发布Pipeline时触发错误:

Error... ##[error]Publishing build artifacts failed with an error: Not found PathtoPublish: /home/vsts/work/1/s/test/plan.out

当前Pipeline的任务配置如下:

- task: TerraformTaskV4@4
  enabled: true
  displayName: 'Terraform : PLAN'
  inputs:
    provider: 'azurerm'
    command: 'plan'
    workingDirectory: '$(System.DefaultWorkingDirectory)/$(env)'
    commandOptions: '-lock=false -out=plan.out -var "env=$(env)" -var "prefix=$(application-code-prefix)" -var "agentVmIpAddress=[\"$(ipaddressVar)\"]" -var "vnet_address_space=$(vnet-cidr)"'
    environmentServiceNameAzureRM: 'spDeployment_ISL-LDS-Test'

- task: PublishBuildArtifacts@1
  enabled: true
  displayName: 'Publish Terraform Plan'
  inputs:
    PathtoPublish: '$(Pipeline.Workspace)/s/$(env)/*plan.out*'
    ArtifactName: 'Terraform Plan'

原因与解决方案

1. plan.out的实际存储路径

Terraform执行plan命令时,-out=plan.out是相对路径,文件会生成在你指定的workingDirectory目录下,也就是:
$(System.DefaultWorkingDirectory)/$(env)/plan.out

注:$(System.DefaultWorkingDirectory)和$(Pipeline.Workspace)/s是完全等价的路径,所以实际路径也可写为:
$(Pipeline.Workspace)/s/$(env)/plan.out

从报错信息看,$(env)的值是test,所以VM上的具体路径就是:
/home/vsts/work/1/s/test/plan.out

2. 发布任务的问题点

当前发布任务用了通配符*plan.out*,虽然理论上能匹配,但直接指定精确路径更可靠,避免通配符匹配异常。

3. 修正后的发布任务

把PathtoPublish改成精确路径即可,两种写法都可以:

写法一:用$(Pipeline.Workspace)

- task: PublishBuildArtifacts@1
  enabled: true
  displayName: 'Publish Terraform Plan'
  inputs:
    PathtoPublish: '$(Pipeline.Workspace)/s/$(env)/plan.out'
    ArtifactName: 'Terraform Plan'

写法二:和Terraform任务保持一致路径变量

- task: PublishBuildArtifacts@1
  enabled: true
  displayName: 'Publish Terraform Plan'
  inputs:
    PathtoPublish: '$(System.DefaultWorkingDirectory)/$(env)/plan.out'
    ArtifactName: 'Terraform Plan'

4. 快速验证路径的方法

要是不确定文件是否存在或路径对不对,可以在两个任务之间加个Bash任务,列出目录内容确认:

- task: Bash@3
  displayName: 'Check plan.out location'
  inputs:
    targetType: 'inline'
    script: |
      ls -la $(System.DefaultWorkingDirectory)/$(env)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:43:15