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

GitLab CI/CD部署AKS时terraform_plan阶段报找不到az命令错误

问题原因

报错的核心原因是你使用的hashicorp/terraform:1.2.3是官方提供的精简镜像,基于Alpine Linux构建,镜像内仅预装了Terraform二进制文件,没有内置Azure CLI工具(即az命令)。
当你的Terraform配置中AzureRM Provider采用Azure CLI认证模式时,Provider会主动在系统$PATH路径下查找az可执行文件,通过调用CLI接口获取Azure认证凭据,找不到对应文件时就会抛出你看到的报错。你配置的entrypoint路径规则没有问题,本质是镜像本身缺少依赖组件。

解决方案

你可以根据实际场景选以下任意一种方案修复:

  • 方案1:换用无CLI依赖的服务主体认证(生产环境推荐)
    不需要在镜像中安装Azure CLI,直接在GitLab CI项目的CI/CD变量配置中添加以下4个受保护、掩码的敏感变量:

    • ARM_CLIENT_ID:Azure AD服务主体的应用(客户端)ID
    • ARM_CLIENT_SECRET:Azure AD服务主体的客户端密钥
    • ARM_TENANT_ID:服务主体所属的Azure租户ID
    • ARM_SUBSCRIPTION_ID:要部署AKS的Azure订阅ID
      AzureRM Provider启动时会自动读取这些环境变量完成身份认证,完全不依赖az命令,流水线执行速度更快,也不会出现CLI版本兼容问题,原有流水线配置不需要做其他改动。
  • 方案2:在现有镜像基础上临时安装Azure CLI
    如果确实需要用Azure CLI做认证,可以在流水线的before_script阶段添加Alpine系统对应的Azure CLI安装步骤,修改后的before_script配置参考如下:

    before_script:  
      - cd ${TF_ROOT}
      # 新增Azure CLI安装及验证步骤
      - apk add --no-cache py3-pip python3 openssl
      - pip install --no-cache-dir azure-cli>=2.0.79
      - az version
      # 原有逻辑保留
      - rm -rf .terraform
      - terraform --version
      - terraform init
    

    这种方式每次流水线运行都要执行安装步骤,会增加数分钟的流水线耗时,适合临时调试场景。

  • 方案3:使用预装依赖的自定义镜像
    可以提前构建一个同时预装对应版本Terraform、Azure CLI的自定义镜像,推送到自己的容器镜像仓库,流水线直接引用这个自定义镜像即可。这种方式既避免了每次流水线临时安装依赖的耗时,也能保证工具版本固定,不会出现版本不兼容问题,适合长期稳定运行的流水线场景。

内容的提问来源于stack exchange,提问作者Salvatore Calla'

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:03:21