无法 运行 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
我正在尝试 运行 使用嵌套的 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