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

Bitbucket流水线通过Azure CLI部署至Azure VM时无法访问脚本文件

问题根因

你当前的错误核心原因是:az vm run-command invoke 的 --scripts 参数如果直接传文件路径,指向的是目标Azure VM本地的文件路径,而非Bitbucket流水线运行环境(runner)上的本地路径。你传入的 $BITBUCKET_CLONE_DIR/SetupSimpleSite.ps1 是Bitbucket Linux runner上的本地路径,Windows VM完全无法访问该路径,自然会报路径不存在的错误。
你之前执行az account show正常,是因为该命令直接在流水线加载的azure-cli容器内执行,不需要和目标VM交互,和run-command的运行逻辑完全不同。

解决方案

你不需要调整脚本存放位置,仅修改流水线配置即可实现调用源代码中的PowerShell脚本:

方法一:使用az cli原生@本地文件语法(推荐)

az cli原生支持参数值前加@前缀,会自动读取对应本地文件的内容作为参数值上传到Azure侧,不需要手动处理文件内容和转义,修改你的CLI_COMMAND配置如下:

CLI_COMMAND: 'az vm run-command invoke --command-id RunPowerShellScript --name $AZURE_VM_NAME --resource-group $AZURE_RESOURCE_GROUP_NAME --scripts @$BITBUCKET_CLONE_DIR/SetupSimpleSite.ps1'

仅需要在原文件路径前加@符号即可解决问题。

方法二:手动读取脚本内容传参

如果你的脚本包含大量特殊字符,用方法一出现转义异常,可以先在流水线中读取脚本内容存入变量,再传给run-command:

test-azure-cli-pipeline:
- step:
    name: "Deploy to Azure VM"
    deployment: staging
    script:
    - PS_SCRIPT_CONTENT=$(cat $BITBUCKET_CLONE_DIR/SetupSimpleSite.ps1 | tr '\n' ';' | sed 's/"/\\"/g')
    - pipe: microsoft/azure-cli-run:1.1.0
      variables:
        AZURE_APP_ID: $AZURE_APP_ID
        AZURE_PASSWORD: $AZURE_PASSWORD
        AZURE_TENANT_ID: $AZURE_TENANT_ID
        CLI_COMMAND: 'az vm run-command invoke --command-id RunPowerShellScript --name $AZURE_VM_NAME --resource-group $AZURE_RESOURCE_GROUP_NAME --scripts "$PS_SCRIPT_CONTENT"'
补充注意事项
  • 如果你的PowerShell脚本需要传入动态参数,可以在命令后追加 --parameters 参数名1=参数值1 参数名2=参数值2 即可。
  • 请确认你的Azure VM已开启运行命令功能,且所用服务主体有Microsoft.Compute/virtualMachines/runCommand/action权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 00:57:01