Задайте выходную переменную в задаче Azure CLI на VSTS

Я схожу с ума, чтобы выполнить эту очень простую задачу. Мне нужно установить Выходную переменную в задаче CLI Azure в Visual Studio Team Services, потому что следующая задача в определении выпуска будет выполняться в соответствии со значением этой переменной.
Я написал этот простой код

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)'")

который работает, но не так, как ожидалось, на самом деле, когда я читаю переменную Ouput в следующей задаче CLI Azure и пытаюсь напечатать ее на экране, вместо выходных данных я получаю командную строку...

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

Что я делаю неправильно?

1 ответ

Решение

Обратитесь к этому коду ниже:

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 в разделе Как настроить вывод команд в виде переменной в командном файле

При использовании Azure CLI версии 2.* вы можете использовать команду powershell, а не мастер пакетного сценария. Документация Microsoft находится здесь

Например, если вам нужен токен доступа для обновления базы данных Azure, он будет выглядеть так:

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

Вдохновленный ответом выше, но с некоторыми вариациями.

Работает в задаче Azure CLI для агента Hosted Ubuntu в Microsoft DevOps с июля 2019 года.

В этом примере запускается команда 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"

У меня проблема (код ошибки 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