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

在Azure CLI任务中传递变量组值时如何正确转义?

解决Azure CLI传递含特殊字符机密到Bicep的问题

方案1:使用JSON参数文件(推荐,最可靠)

通过生成JSON参数文件传递参数,完全规避命令行转义问题。PowerShell的ConvertTo-Json会自动处理所有特殊字符的转义(包括双引号、单引号、反斜杠、换行等),是稳定性最高的方案。

流水线步骤示例:

- task: AzureCLI@2
  displayName: deploy bicep template
  inputs:
    azureSubscription: ${{ parameters.azure_subscription }}
    scriptType: 'ps'
    scriptLocation: 'inlineScript'
    inlineScript: | 
      # 构建参数对象
      $params = @{
        environment = "${{ parameters.environment }}"
        kv_secret_one = "$(bd_kv_secret_one)"
        kv_secret_two = "$(bd_kv_secret_two)"
      }
      # 导出为UTF-8编码的JSON参数文件
      $params | ConvertTo-Json -Depth 10 | Out-File -FilePath $(Pipeline.Workspace)/params.json -Encoding utf8
      # 执行部署,引用参数文件
      az deployment group create `
        --name foo.$(Build.BuildNumber) `
        --resource-group my-rg-name `
        --template-file $(Pipeline.Workspace)/iac/main.bicep `
        --parameters @$(Pipeline.Workspace)/params.json

方案2:PowerShell变量中转后传递

将机密存入PowerShell变量,再用双引号包裹传递给Azure CLI,依赖PowerShell自动处理变量内的特殊字符转义,适合不想生成额外文件的场景。

流水线步骤示例:

- task: AzureCLI@2
  displayName: deploy bicep template
  inputs:
    azureSubscription: ${{ parameters.azure_subscription }}
    scriptType: 'ps'
    scriptLocation: 'inlineScript'
    inlineScript: | 
      # 将机密存入PowerShell变量
      $secret1 = "$(bd_kv_secret_one)"
      $secret2 = "$(bd_kv_secret_two)"
      # 执行部署,用双引号传递变量
      az deployment group create `
        --name foo.$(Build.BuildNumber) `
        --resource-group my-rg-name `
        --template-file $(Pipeline.Workspace)/iac/main.bicep `
        --parameters environment="${{ parameters.environment }}" `
            kv_secret_one="$secret1" `
            kv_secret_two="$secret2"

方案3:直接传递JSON字符串参数

将参数转换为压缩的JSON字符串,直接传递给--parameters参数,Azure CLI会按照JSON标准解析内容,无需手动转义。

流水线步骤示例:

- task: AzureCLI@2
  displayName: deploy bicep template
  inputs:
    azureSubscription: ${{ parameters.azure_subscription }}
    scriptType: 'ps'
    scriptLocation: 'inlineScript'
    inlineScript: | 
      # 生成压缩格式的参数JSON字符串
      $paramsJson = @{
        environment = "${{ parameters.environment }}"
        kv_secret_one = "$(bd_kv_secret_one)"
        kv_secret_two = "$(bd_kv_secret_two)"
      } | ConvertTo-Json -Compress
      # 执行部署,传递JSON字符串
      az deployment group create `
        --name foo.$(Build.BuildNumber) `
        --resource-group my-rg-name `
        --template-file $(Pipeline.Workspace)/iac/main.bicep `
        --parameters $paramsJson

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:00:58