Azure DevOps中执行terraform apply报错TypeError: Cannot read property 'includes' of null
错误原因定位
你遇到的TypeError: Cannot read property 'includes' of null报错不是Terraform本身执行抛出的错误,属于Azure DevOps官方Terraform任务插件的内部解析错误,触发原因是插件读取到了预期外的null值,对空值调用了字符串的includes方法。
修复步骤
- 优先修复Terraform配置文件的语法问题:
- 你提供的tf配置中
azurerm_api_management_api资源的import块缺少闭合的},会导致配置解析失败 - 检查
#{storageaccountlink}#占位符是否已经在管道前置步骤完成替换,未替换的占位符会被识别为非法值,导致配置解析返回空 - 修正变量大小写不一致问题:
data "azurerm_api_management"中用的是var.apimName,资源块中用的是var.apimname,大小写不同会导致变量取值为空
- 你提供的tf配置中
- 修复DevOps管道任务配置问题:
- 第一个任务的
backendAzureRmStorageAccountName和backendAzureRmContainerName参数没有给变量加单引号,变量解析为空时会直接给参数赋值null,修改为:
backendAzureRmStorageAccountName: '$(strname)' backendAzureRmContainerName: '$(tfContainer)'- 第二个apply任务没有配置backend相关参数,和plan阶段的状态存储配置不一致,会导致读取状态文件失败返回null,必须补全和plan阶段完全相同的backend配置
- 第二个任务的
commandOptions参数写的是--auto-approve,多了一个前导横杠,Terraform apply的正确参数是-auto-approve,错误参数会触发插件解析异常
- 第一个任务的
- 替换任务版本:
TerraformTaskV2已经停止维护,对新的Terraform版本和配置语法兼容性较差,直接将任务替换为最新的TerraformTaskV4@4版本即可解决大部分插件内部错误 - 前置变量校验:
在Terraform任务前新增一个PowerShell/Bash任务,打印所有用到的管道变量值,确认$(rgname)、$(strname)、$(tfContainer)、$(storagekey)等变量均存在有效值,没有空值情况
内容的提问来源于stack exchange,提问作者prakashrajansakthivel
相关产品推荐
相关产品推荐

