将输出保存到在Azure-CLI DevOps任务中不起作用的变量

时间:2019-05-23 07:02:21

标签: azure azure-devops azure-cli azure-cli2

尝试将azure顾问程序建议的输出保存到变量中,以便我可以继续执行下一个任务。

但是,无论我尝试使用哪种语法,并且相信我我都尝试了所有可能的组合,都不会保存该变量。 有趣的是,这些工作在云外壳(bash)中 例如。

rgName="$(az group list --query "[?tags.Test=='yes'].name" --output tsv)" 
az group show -n $rgName

这在Cloud Shell中可以正常工作。但不是在DevOps azurecli任务中。 我还提到了堆栈溢出本身中给出的多个示例,但是它们都不起作用。 使用任务版本1。*

rgName' is not recognised as an internal or external command,

有人可以为DevOps Task给出一个可行的例子吗?

注意:顺便说一句,我使用cli的全部原因是因为无法找到Advisor RM模块,而Az模块在任务版本4中无法正确加载。*

2 个答案:

答案 0 :(得分:0)

如上文Shayki所述,task.setvariable可以帮助您从脚本中设置变量。 this文档中对此进行了详细说明。简而言之,您将必须执行以下操作:

rgName=$(az group list --query "[?tags.Test=='yes'].name" -o tsv | tr '\n' ' ')
echo "##vso[task.setvariable variable=RESULT]$rgName"

task.setvariable是一个日志记录命令,不会更新环境变量,但是会使新变量可用于同一作业中的下游步骤。请注意,结果用CRLF分隔而不是空格,因此修剪tr '\n' ' '。现在,在需要变量的后续任务中,可以按以下方式使用它:

echo "Result: $(RESULT)"

请参阅this博客以获取详细的演练。希望这会有所帮助!

答案 1 :(得分:0)

对我来说,解决此问题的方法是使用Linux代理作业而不是Windows代理,然后添加Azure CLI任务以在Linux代理(特别是ubuntu-16.04)上运行。