将输出保存到Azure CLI DevOps任务中不工作的变量

将输出保存到Azure CLI DevOps任务中不工作的变量,azure,azure-devops,azure-cli,azure-cli2,Azure,Azure Devops,Azure Cli,Azure Cli2,正在尝试将azure advisor建议的输出保存到变量,以便我可以传递到下一个任务 然而,无论我尝试什么语法,相信我,我已经尝试了所有可能的组合,变量都不会被保存。 有趣的是,这些在cloud shell(bash)中工作 例如 这在cloud shell中工作得很好。但不在DevOps azurecli任务中。 我还提到了stack overflow本身中给出的多个示例,但它们都不起作用。 使用任务版本1* rgName' is not recognised as an internal o

正在尝试将azure advisor建议的输出保存到变量,以便我可以传递到下一个任务

然而,无论我尝试什么语法,相信我,我已经尝试了所有可能的组合,变量都不会被保存。 有趣的是,这些在cloud shell(bash)中工作 例如

这在cloud shell中工作得很好。但不在DevOps azurecli任务中。 我还提到了stack overflow本身中给出的多个示例,但它们都不起作用。 使用任务版本1*

rgName' is not recognised as an internal or external command,
有人能为DevOps任务提供一个工作示例吗


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

正如Shayki上面提到的,
task.setvariable
可以帮助从脚本中设置变量。文件中也详细说明了这一点。简而言之,您必须这样做:

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

请参阅博客以获得详细的演练。希望这有帮助

如上所述,
task.setvariable
可以帮助从脚本设置变量。文件中也详细说明了这一点。简而言之,您必须这样做:

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

请参阅博客以获得详细的演练。希望这有帮助

我解决的是使用Linux代理作业而不是Windows代理,然后添加Azure CLI任务以在Linux代理上运行,特别是ubuntu-16.04。

我解决的是使用Linux代理作业而不是Windows代理,然后添加Azure CLI任务以在Linux代理上运行,特别是ubuntu-16.04。

是否需要将变量保存到下一个任务?您是否尝试了echo“##vso[task.setvariable=rgName']value”?不,这就是我想要的。我无法将结果保存到命令rgName=“$(az组列表--查询”[?tags.Test=='yes'].name”--output tsv)中的“rgName=”中,是否需要将变量保存到下一个任务?您是否尝试了echo“##vso[task.setvariable=rgName']value”?不,这就是我想要的。我无法将结果保存到命令rgName=“$(az组列表--查询”[?tags.Test=='yes'].name”--output tsv)中的“rgName=”谢谢,我知道task.setvariable。我的问题是将命令的结果保存到“rgName”变量中。根据常识,rgName='which command'会将结果保存到'rgName'中,但由于某些原因,它在该任务中不起作用。如果第一步本身不起作用,那么我就不能使用echo“##vso[task.setvariable=RESULT]$rgName”,因为根据我所面临的情况,$rgName将始终为空,因为结果不会保存在那里。您是否仍然对此进行阻止?我已经使用其他方法解决了该问题,但是今天测试时该问题仍然存在。无论我尝试什么语法,我都无法在CLI任务中使用它。同样的语法也适用于cloushell。谢谢,我知道task.setvariable。我的问题是将命令的结果放入“rgName”变量。根据常识,rgName='which command'会将结果保存到'rgName'中,但由于某些原因,它在该任务中不起作用。如果第一步本身不起作用,那么我就不能使用echo“##vso[task.setvariable=RESULT]$rgName”,因为根据我所面临的情况,$rgName将始终为空,因为结果不会保存在那里。您是否仍然对此进行阻止?我已经使用其他方法解决了该问题,但是今天测试时该问题仍然存在。无论我尝试什么语法,我都无法在CLI任务中使用它。同样的语法也适用于cloushell。