在VSTS上的Azure CLI任务中设置输出变量

use*_*037 5 azure azure-cli azure-devops azure-pipelines-release-pipeline azure-cli2

我为实现这一非常简单的任务而疯狂。我需要在Visual Studio Team Services上的Azure CLI任务中设置一个Output Variable,因为Release定义中的下一个任务将根据该变量的值执行。
我写了这个简单的代码

call az extension add --name azure-cli-iot-ext
call echo ##vso[task.setvariable variable=iotEdgeExists;]$(az iot hub query -n $(iotHub) -q "select * from devices.modules where devices.deviceId ='$(iotEdge)'")
Run Code Online (Sandbox Code Playgroud)

确实有效,但不是预期的,实际上,当我在下一个Azure CLI任务中读取Ouput变量并尝试在屏幕上打印时,我得到了命令字符串而不是输出...

call echo"$(az iot hub query -n <IOT_HUB> -q "select * from devices.modules where devices.deviceId ='<IOT_EDGE>'")"
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

goo*_*all 12

如果使用Azure CLI 版本 2. * ,则可以使用 powershell 命令而不是批处理脚本向导。微软的文档在这里找到

例如,如果您需要访问令牌来更新 azure 数据库,它将如下所示:

$token= & az account get-access-token --resource=https://database.windows.net --query accessToken
Write-Output("##vso[task.setvariable variable=sqlToken;]$token")
Run Code Online (Sandbox Code Playgroud)

如果在本地测试,请不要忘记先登录:

az login
Run Code Online (Sandbox Code Playgroud)

在此处安装 Azure cli


sta*_*SFT 7

请参考下面的代码:

call {your command}>tmpFile1
set /p myvar= < tmpFile1 
echo "##vso[task.setvariable variable=testvar;]%myvar%"
Run Code Online (Sandbox Code Playgroud)

要么

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

Mechaflash在如何将命令输出设置为批处理文件中的变量中的答案