【问题标题】:Saving output to variable not working in Azure-CLI DevOps task将输出保存到变量在 Azure-CLI DevOps 任务中不起作用
【发布时间】:2019-05-23 07:02:20
【问题描述】:

尝试将 azure advisor 推荐的输出保存到一个变量中,以便我可以传递到下一个任务。

但是,无论我尝试什么语法,相信我已经尝试了所有可能的组合,变量都不会被保存。 有趣的是,这些在 cloud shell (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 中正确加载。*

【问题讨论】:

  • 您需要将变量保存到下一个任务吗?你试过echo "##vso[task.setvariable variable=rgName']value" 吗?
  • 不,这就是我想要的。我根本无法在命令 rgName="$(az group list --query "[?tags.Test=='yes'].name" --output tsv)" 中将结果保存到 'rgName='

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


【解决方案1】:

正如上面提到的 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 博客以获取详细的演练。希望这会有所帮助!

【讨论】:

  • 谢谢,我知道 task.setvariable。我的问题是将命令的结果放入“rgName”变量中。常识说 rgName='whatever command' 会将结果保存到 'rgName' 但由于某种原因它在此任务中不起作用。如果第一步本身不起作用,那么我不能使用 echo "##vso[task.setvariable variable=RESULT]$rgName" 因为,基于我所面临的 $rgName 将始终为空,因为结果没有保存在那里。
  • 你还在受阻吗?
  • 我已经通过其他方式解决了这个问题,但是当我今天测试时问题仍然存在。无论我尝试什么语法,我都无法让它在 CLI 任务中工作。但是,相同的语法在 cloushell 中也可以使用。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多