Azure DevOps使用Terraform部署AKS时TerraformInstaller歧义报错如何解决
问题定位与解决方法
核心错误原因
流水线启动秒挂的核心原因有2个优先级最高的可能:
- 你安装了两款不同的Terraform扩展,二者均提供
TerraformCLI@0任务标识,流水线在调用任务时无法匹配到对应扩展的实现,直接触发校验失败 Terraform Init任务中必填参数留空,backendServiceArm、存储账号相关的后端配置参数为必填项,空值会直接导致任务校验不通过
具体解决步骤
- 第一步:卸载其中一款Terraform扩展,优先保留微软官方发布的Terraform扩展即可,彻底解决任务标识冲突问题
- 第二步:补全
Terraform Init任务的空值参数,参数说明如下:backendServiceArm:填写Azure DevOps项目中提前创建的、拥有Azure资源操作权限的Azure服务连接名称backendAzureRmResourceGroupName:填写存储Terraform状态文件的存储账号所属的Azure资源组名称backendAzureRmStorageAccountName:填写存储Terraform状态文件的Azure存储账号名称backendAzureRmContainerName:填写存储账号中用于存放tfstate文件的Blob容器名称
- 第三步:检查Terraform扩展的项目授权,确保扩展已经被授权给当前运行流水线的项目:进入组织设置->扩展->已安装扩展,找到保留的Terraform扩展,确认授权范围包含当前项目
- 第四步:重新运行流水线,若仍失败可查看作业的初始化日志,根据具体错误提示进一步定位
补全后流水线示例
trigger: - main pool: vmImage: 'ubuntu-latest' stages: - stage: TerraformValidate jobs: - job: TerraformValidateJob continueOnError: false steps: - task: PublishPipelineArtifact@1 displayName: Publish Artifacts inputs: targetPath: '$(System.DefaultWorkingDirectory)/terraform-manifests' artifact: 'terraform-manifests-out' publishLocation: 'pipeline' - task: TerraformInstaller@0 displayName: Terraform Install inputs: terraformVersion: 'latest' - task: TerraformCLI@0 displayName: Terraform Init inputs: command: 'init' workingDirectory: '$(System.DefaultWorkingDirectory)/terraform-manifests' backendType: 'azurerm' backendServiceArm: '你的Azure服务连接名称' backendAzureRmResourceGroupName: '你的存储账号资源组名称' backendAzureRmStorageAccountName: '你的存储账号名称' backendAzureRmContainerName: '你的Blob容器名称' backendAzureRmKey: 'aks-base.tfstate' allowTelemetryCollection: false - task: TerraformCLI@0 displayName: Terraform Validate inputs: command: 'validate' workingDirectory: '$(System.DefaultWorkingDirectory)/terraform-manifests' allowTelemetryCollection: false
内容的提问来源于stack exchange,提问作者Satyam Pandey
相关产品推荐
相关产品推荐

