在 VSTS 上的 Azure CLI 任务中设置输出变量
Set Output Variable in Azure CLI task on VSTS
我为完成这个非常简单的任务而发疯。
我需要在 Visual Studio Team Services 上的 Azure CLI 任务中设置输出变量,因为发布定义中的下一个任务将根据此变量的值执行。
我写了这个简单的代码
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>'")"
我做错了什么?
参考下面这段代码:
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
中的回答
灵感来自上面的答案,但有一些变化。
截至 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"
如果使用 Azure CLI 版本 2.* ,您可以使用 powershell 命令而不是批处理脚本向导。 Microsoft 的文档找到 here
例如,如果您需要访问令牌来更新 Azure 数据库,它将如下所示:
$token= & az account get-access-token --resource=https://database.windows.net --query accessToken
Write-Output("##vso[task.setvariable variable=sqlToken;]$token")
如果在本地测试,请不要忘记先登录:
az login
我在使用
时遇到了一些问题(错误代码 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
我为完成这个非常简单的任务而发疯。
我需要在 Visual Studio Team Services 上的 Azure CLI 任务中设置输出变量,因为发布定义中的下一个任务将根据此变量的值执行。
我写了这个简单的代码
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>'")"
我做错了什么?
参考下面这段代码:
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
中的回答灵感来自上面的答案,但有一些变化。
截至 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"
如果使用 Azure CLI 版本 2.* ,您可以使用 powershell 命令而不是批处理脚本向导。 Microsoft 的文档找到 here
例如,如果您需要访问令牌来更新 Azure 数据库,它将如下所示:
$token= & az account get-access-token --resource=https://database.windows.net --query accessToken
Write-Output("##vso[task.setvariable variable=sqlToken;]$token")
如果在本地测试,请不要忘记先登录:
az login
我在使用
时遇到了一些问题(错误代码 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