无法 运行 Azure DevOps 管道中的嵌套 az cli 命令

Unable to run nested az cli commands in Azure DevOps pipeline

我正在尝试 运行 使用嵌套的 az cli 命令执行 Azure DevOps 任务。我在 azure-pipelines.yaml

开头定义了变量
trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  resourceGroup: test1234
  acrName: taerarawrr2.azurecr.io

在任务中,我可以使用 $(resourceGroup) 和 $(acrName) 访问这些值。现在我想 运行 一个使用这两个变量的 az cli 任务,并将命令的输出保存在一个新变量 (ACR_LOGIN_SERVER) 中,稍后可以在任务中使用。

- task: AzureCLI@2
  displayName: Run docker image
  inputs:
    azureSubscription: serviceprincipaltest
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      $ACR_LOGIN_SERVER= $(az acr show --name $(acrName) --resource-group $(resourceGroup) --query "loginServer" --output tsv)
      echo $(ACR_LOGIN_SERVER)

然而,由于某种原因,这失败了。我猜这个嵌套命令的语法有问题。我试过在不同位置使用括号、$ 和引号,但似乎没有任何效果。我也没有设法找到任何示例,说明如何正确设置这样的内联脚本的格式。任何帮助将不胜感激。

这里是 Azure CLI task 的 link。

您在 az acr command 周围有 $(),它将尝试找到一个不存在的类似名称的变量。请删除它并使用如下脚本:

call {your command}>tmpFile1
set /p myvar= < tmpFile1 
echo "##vso[task.setvariable variable=testvar;]%myvar%"

FOR /F "tokens=* USEBACKQ" %%F IN (`{your command}`) DO (
SET var=%%F
)
echo "##vso[task.setvariable variable=testvar;]%var%"

查看此线程:

你的脚本有两个问题

  • 使用 $(command)command substituion 在 Azure DevOps 中不起作用,因为它试图用变量替换它。使用反引号代替:`command`
  • 在bash中给变量赋值时,不要在名称前加$前缀,那是为了引用。
ACR_LOGIN_SERVER=`az acr show --name $(acrName) --resource-group $(resourceGroup) --query "loginServer" --output tsv`

echo $ACR_LOGIN_SERVER