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

Bitbucket流水线Azure自定义脚本扩展因commandToExecute重复配置失败求助

解决Azure VM自定义脚本扩展的"commandToExecute重复定义"错误

这问题的根源其实很直白——Azure自定义脚本扩展明确要求commandToExecute只能在公共设置或受保护设置二选一配置,而你的当前操作刚好同时在两个地方定义了它,直接触发了冲突报错。我来帮你拆解原因和解决办法:

问题到底出在哪?

你用的microsoft/azure-vm-linux-script-deploy:1.0.1管道,只要设置了AZURE_EXTENSION_COMMAND变量,就会自动把这个命令注入到自定义脚本扩展的公共设置里;但同时你在执行az vm extension set时,又通过--protected-settings protected-settings.json传入了包含commandToExecute的配置文件——这就导致同一个配置项被重复定义,自然触发了报错。

两种可行的修复方案(选一个适合你的就行)

方案1:移除流水线的AZURE_EXTENSION_COMMAND变量(适合命令含敏感信息的场景)

如果你的执行命令需要保密(比如包含密码、密钥这类敏感内容),推荐用这个方案:
修改流水线配置,删掉AZURE_EXTENSION_COMMAND: 'bash setup_script.sh'这一行,让所有配置都通过protected-settings.json传递,并且确保这个JSON文件里只保留一份commandToExecute定义。

修改后的流水线变量示例:

- pipe: microsoft/azure-vm-linux-script-deploy:1.0.1
  variables:
    AZURE_APP_ID: $AZURE_APP_ID
    AZURE_PASSWORD: $AZURE_PASSWORD
    AZURE_TENANT_ID: $AZURE_TENANT_ID
    AZURE_RESOURCE_GROUP: $AZURE_RESOURCE_GROUP
    AZURE_VM_NAME: $AZURE_VM_NAME
    AZURE_EXTENSION_FILES: 'setup_script.sh'
    AZURE_FORCE_UPDATE: 'true'
    AZURE_NO_WAIT: 'false'
    AZURE_CLEANUP: 'true'

同时确保protected-settings.json的格式正确,比如:

{
  "commandToExecute": "bash setup_script.sh"
}

方案2:移除--protected-settings参数(适合命令无敏感信息的场景)

如果你的执行命令没有需要保密的内容,可以直接放弃受保护设置,只用流水线变量传递命令:
修改az vm extension set命令,去掉--protected-settings protected-settings.json这一段,完全依赖流水线的AZURE_EXTENSION_COMMAND变量来指定执行命令。

修改后的az命令示例:

az vm extension set --resource-group myresourecegroup --vm-name my-vm-test --name CustomScript --publisher Microsoft.Azure.Extensions --version 2.0 --verbose --force-update

这样流水线会自动把AZURE_EXTENSION_COMMAND的值放入公共设置,不会和受保护设置产生冲突。

最后验证一下

不管选哪个方案,都要确认:

  • 只有一个地方定义了commandToExecute(要么公共设置,要么受保护设置)
  • 如果用受保护设置,JSON文件没有语法错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:32:34