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

时间:2018-03-14 16:27:17

标签: azure azure-devops azure-pipelines-release-pipeline azure-cli azure-cli2

我为实现这个非常简单的任务而疯狂。 我需要在Visual Studio Team Services上的Azure CLI任务中设置输出变量,因为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)'")
实际上,当我在下一个Azure CLI任务中读取输出变量并尝试在屏幕上打印时,我得到命令字符串而不是输出...

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

我做错了什么?

4 个答案:

答案 0 :(得分:4)

请参阅以下代码:

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%"

Mechaflash在How to set commands output as a variable in a batch file

中的回答

答案 1 :(得分:1)

如果使用 Azure CLI版本2。* ,则可以使用Powershell命令而不是批处理脚本向导。找到了Microsoft文档here

例如,如果您需要访问令牌来更新azure数据库,它将看起来像这样:

{{1}}

答案 2 :(得分:0)

从以上答案中得到启发,但有所不同。

从2019年7月开始在Microsoft DevOps中的托管Ubuntu代理上执行 Azure CLI 任务。

此示例运行az命令以获取存储帐户的完整资源名称,并将其设置在变量 _StorageAccountNameVar 中,以用于其他管道任务。

myvar=`az storage account list -g MyResourceGroup --query "[?contains(name, 'config')].name" -o tsv`
echo $myvar
echo "##vso[task.setvariable variable=_StorageAccountNameVar;]$myvar"

答案 3 :(得分:0)

我在

时遇到了一些麻烦(错误代码255)
    FOR /F “tokens=* USEBACKQ” %%F IN (`az account get-access-token --resource=https://database.windows.net/ -query accessToken`) DO (
SET var=%%F
)
echo ##vso[task.setvariable variable=sqlToken;]%var%

所以我用了这个(对我有用)

for /f "tokens=1 USEBACKQ" %%F in (`az account get-access-token --resource=https://database.windows.net/ --query accessToken`) do echo ##vso[task.setvariable variable=sqltoken;]%%F