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

如何在DevOps构建YAML中自动调用Terraform输出变量?

Terraform输出变量在Azure DevOps Pipeline中的自动传递问题

问题描述

我尝试为以下Terraform输出创建变量,以便在构建定义YAML中使用。我可以手动获取SPN appID和存储访问密钥,但希望将其作为Terraform部署流程的一部分自动获取。使用如下硬编码默认值的变量定义方式不可行,是否有其他实现方法?

variable "client_id" {
  type        = string
  default     = ""
  description = "description"
}

Terraform输出配置

服务主体ID输出

output "appid_tfazsp" {
  value     = data.azurerm_client_config.current.client_id
  sensitive = true
}

服务主体密码输出

output "pass_tfazsp" {
  value     = azuread_service_principal_password.tfazsp.value
  sensitive = true
}

存储账户访问密钥输出

data "azurerm_storage_account" "SASPass" {
  name                = var.storageAccount_name
  resource_group_name = azurerm_resource_group.rg_name.name
}

output "storage_account_SASPass" {
  value     = data.azurerm_storage_account.stg.primary_access_key
  sensitive = true
}

原始Azure DevOps构建定义(YAML)

trigger:
  branches:
    include:
      - main

  paths:
    include:
      - /Azure-Terraform/variables.tf
      - /Azure-Terraform/main.tf
        /Azure-Terraform/ado_variables.tf


pool:
  vmImage: "ubuntu-latest"

variables:
  - group: hawaVB
  - name: state_file
    value: tf-statefile.state

steps:
  - task: ms-devlabs.custom-terraform-tasks.custom-terraform-installer-task.TerraformInstaller@0
    displayName: 'Install Terraform'
  - script: terraform version
    displayName: Terraform Version
  - script:  az login --service-principal -u $(application_id) -p $(SPNPass) --tenant $(tenant_id)
    displayName: 'Log Into Azure'
  - script: terraform init -backend-config=resource_group_name=$(rg_name) -backend-config="storage_account_name=$(storageAccount_name)" -backend-config="container_name=$(cont_name)" -backend-config="access_key=$(SASPass)" -backend-config="key=$(state_file)"
    displayName: "Terraform Init"
    workingDirectory: $(System.DefaultWorkingDirectory)/Azure-Terraform
  - script: terraform plan -var="client_id=$(application_id)" -var="SPNPass=$(SPNPass)" -var="tenant_id=$(tenant_id)" -var="subscription_id=$(subscription_id)" -var="VmAdminPass=$(VmAdminPass)" -out="out.plan"
    displayName: Terraform Plan
    workingDirectory: $(System.DefaultWorkingDirectory)/Azure-Terraform
  - script: terraform apply out.plan
    displayName: 'Terraform Apply'
    workingDirectory: $(System.DefaultWorkingDirectory)/Azure-Terraform

尝试更新后的Pipeline配置

trigger:
  branches:
    include:
      - main

  paths:
    include:
      - /TFAZ/variables.tf
      - /TFAZ/main.tf

pool:
  vmImage: "windows-latest"

variables:
  - group: hawaVB
  
steps:
  - task: ms-devlabs.custom-terraform-tasks.custom-terraform-installer-task.TerraformInstaller@0
    displayName: 'Install Terraform'
  - script: terraform version
    displayName: Terraform Version
  - task: PowerShell@1
    inputs:
      targetType: 'inline'
      script: |
        Write-Host "##vso[task.setvariable variable=storage_account_SASPass;isOutput=true]$(terraform output -raw outputvar)"
        
        Write-Host "##vso[task.setvariable variable=pass_tfazsp;isOutput=true]$(terraform output -raw outputvar)"
        
        Write-Host "##vso[task.setvariable variable=appid_tfazsp;isOutput=true]$(terraform output -raw outputvar)"
      workingDirectory: $(System.DefaultWorkingDirectory)/TFAZ

  - script: az login --service-principal -u $(appid_tfazsp) -p $(pass_tfazsp) --tenant $(tenant_id)
    displayName: 'Log Into Azure'
  - script: terraform init -backend-config=resource_group_name=$(rg_name) -backend-config="storage_account_name=$(storageAccount_name)" -backend-config="container_name=$(cont_name)" -backend-config="access_key=$(storage_account_SASPass)" -backend-config="key=$(state_file)"
    displayName: "Terraform Init"
    workingDirectory: $(System.DefaultWorkingDirectory)/TFAZ
  - script: terraform plan -var=$(appid_tfazsp) -var="$(pass_tfazsp)" -var="tenant_id=$(tenant_id)" -var="subscription_id=$(subscription_id)" -var=$(VMAdminPass) -out="out.plan"
    displayName: Terraform Plan
    workingDirectory: $(System.DefaultWorkingDirectory)/TFAZ
  - script: terraform apply out.plan
    displayName: 'Terraform Apply'
    workingDirectory: $(System.DefaultWorkingDirectory)/TFAZ

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:48:08