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

Azure DevOps流水线中Terraform跨Job共享tfplan失败求助

解决Azure DevOps流水线中Terraform跨Job共享tfplan文件的问题

问题核心:Azure DevOps的每个Job会在独立的代理虚拟机上运行,Plan阶段生成的tfplan仅存于该Job的代理本地磁盘,Deploy阶段的Job无法直接访问。必须通过**流水线工件(Pipeline Artifact)**实现跨Job文件共享。

修改方案

1. Plan阶段:生成tfplan后上传为流水线工件

在Terraform Plan任务后,添加PublishPipelineArtifact任务,将tfplan文件上传到流水线工件库。

2. Deploy阶段:先下载流水线工件中的tfplan,再执行apply

在Terraform Init任务前,添加DownloadPipelineArtifact任务,将之前上传的tfplan下载到当前Job的工作目录,再执行terraform apply。

修改后的完整流水线配置

trigger:
  - main

pool:
  vmImage: 'ubuntu-latest'  # 替换原中文引号为英文引号

variables:
  - group: KV-SQL-SERVER-TEST

stages:
  - stage: Plan
    displayName: 'Terraform Plan'
    jobs:
      - job: TerraformPlan
        displayName: 'Terraform Plan'
        steps:
          - task: TerraformInstaller@0
            inputs:
              terraformVersion: 'latest'  # 替换中文引号为英文引号
          - script: |
              terraform --version
              terraform init -backend-config="access_key=$(storagetest101-key1)"  # 替换中文引号为英文引号
              terraform plan -out=tfplan
            displayName: 'Terraform Init and Plan'
          # 新增:上传tfplan为流水线工件
          - task: PublishPipelineArtifact@1
            inputs:
              targetPath: 'tfplan'
              artifact: 'tfplan-artifact'
              publishLocation: 'Container'

  - stage: Deploy
    displayName: 'Terraform Apply'
    jobs:
      - job: TerraformApply
        displayName: 'Terraform Apply'
        steps:
          # 新增:下载流水线工件中的tfplan
          - task: DownloadPipelineArtifact@2
            inputs:
              artifact: 'tfplan-artifact'
              path: '$(System.DefaultWorkingDirectory)'
          - task: TerraformInstaller@0
            inputs:
              terraformVersion: 'latest'  # 替换中文引号为英文引号
          - script: |
              terraform --version
              terraform init -backend-config="access_key=$(storagetest101-key1)"  # 替换中文引号为英文引号
              terraform validate
              terraform apply -auto-approve -input=false tfplan
            displayName: 'Terraform Init and Apply'

额外注意事项

  • 原配置中使用了中文引号(如‘ubuntu-latest’、“access_key=...”),这会导致脚本执行报错,必须全部替换为英文引号。
  • 确保上传和下载的工件名称一致(示例中为tfplan-artifact),避免找不到工件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:44:57