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

如何在Bitbucket Pipeline中执行Terraform plan?Azure部署报错求解决

问题原因
  • azuread provider未显式配置:你的Terraform根模块没有定义azuread provider块,Terraform自动拉取provider后找不到对应配置,无法完成初始化。
  • 基础镜像缺少Azure CLI:你Pipeline使用的hashicorp/terraform:latest是仅包含Terraform二进制的轻量镜像,没有预装az命令。azuread provider默认会尝试调用Azure CLI完成认证,找不到命令就会抛出执行失败的报错。
解决方案

以下两个调整配合完成即可解决问题:

1. 补充Terraform代码中的provider配置

你可以选择直接通过环境变量自动认证,不需要依赖Azure CLI,在根目录的providers.tf(或main.tf)中添加如下配置:

terraform {
  required_providers {
    azuread = {
      source  = "hashicorp/azuread"
      version = ">= 2.47.0" # 可替换为你需要的版本号
    }
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 3.0.0" # 可替换为你需要的版本号
    }
  }
}

provider "azuread" {
  # 留空即可,provider会自动读取Pipeline中配置的环境变量完成认证
}

provider "azurerm" {
  features {}
  # 留空即可,provider会自动读取Pipeline中配置的环境变量完成认证
}

同步在根目录的variables.tf中按需添加你用到的变量定义即可。

2. 调整Bitbucket Pipeline配置

方案A(推荐):配置环境变量直接认证,无需安装Azure CLI

Azure官方provider支持直接读取标准前缀的环境变量完成认证,你只需要先在Bitbucket仓库的「CI/CD变量」页面添加以下4个加密变量:

  • ARM_CLIENT_ID:Azure服务主体的客户端ID
  • ARM_CLIENT_SECRET:Azure服务主体的客户端密钥
  • ARM_TENANT_ID:Azure租户ID
  • ARM_SUBSCRIPTION_ID:Azure订阅ID

不需要更换原有镜像,只需要在terraform apply命令后加-auto-approve参数适配非交互环境即可,调整后的Pipeline配置如下:

image: hashicorp/terraform:latest

pipelines:
  default:
        - step:
            name: 部署到Azure开发环境
            script:
                - terraform init -backend-config="storage_account_name=$DEV_TF_CONFIG_STORAGE_ACCOUNT" -backend-config="container_name=$DEV_TF_CONFIG_CONTAINER_NAME" -backend-config="key=$DEV_TF_CONFIG_KEY" -backend-config="sas_token=$DEV_TF_SAS_TOKEN"
                - terraform plan 
                - terraform apply -auto-approve

生产环境建议拆分为两个step:plan步骤输出结果人工审核后,再执行apply步骤,避免误操作。

方案B:安装Azure CLI后通过az登录认证

如果你需要在Pipeline中用到其他az命令,可以更换基础镜像为预装了Azure CLI的版本,先完成服务主体登录再执行Terraform命令:

image: mcr.microsoft.com/azure-cli:latest

pipelines:
  default:
        - step:
            name: 部署到Azure开发环境
            script:
                # 安装Terraform
                - apk add terraform --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
                # 登录Azure
                - az login --service-principal -u $ARM_CLIENT_ID -p $ARM_CLIENT_SECRET --tenant $ARM_TENANT_ID
                - terraform init -backend-config="storage_account_name=$DEV_TF_CONFIG_STORAGE_ACCOUNT" -backend-config="container_name=$DEV_TF_CONFIG_CONTAINER_NAME" -backend-config="key=$DEV_TF_CONFIG_KEY" -backend-config="sas_token=$DEV_TF_SAS_TOKEN"
                - terraform plan 
                - terraform apply -auto-approve

注意事项

  • 所有敏感凭证必须存储在Bitbucket的加密CI/CD变量中,禁止硬编码到YAML或Terraform代码中。
  • 首次上线前建议在本地先执行terraform init、terraform plan验证代码逻辑无误后,再推送到仓库触发Pipeline运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:12:06