将 VSTS 输出变量设置为 bash 命令的结果

Set VSTS output variable to be result from bash command

我是 运行 VSTS 中的一个任务,它对上一步中的变量执行一些操作,然后我需要输出结果以用于未来的任务。我在 linux 构建主机上的命令行任务 运行 中有以下内容,但稍后尝试将结果与 $(podName3).

一起使用时我运气不好
COMMAND="$(echo '$(pods)' | grep -oh -P '[^ ]*' | grep schema)"
##vso[task.setvariable variable=podName3]"$COMMAND"

我已经尝试了几种变体,但都无济于事,需要一些指导,因为这已经困扰我太久了

似乎语法不正确。

试试下面的格式:

COMMAND="$(echo '$pods' | grep -oh -P '[^ ]*' | grep schema)"
echo "##vso[task.setvariable variable=podName3]$COMMAND"

或添加 powershell 任务和 运行 下面的命令来设置变量:

$COMMAND="$(echo '$env:pods' | grep -oh -P '[^ ]*' | grep schema)"

Write-Host "##vso[task.setvariable variable=podName3]$COMMAND"

更多信息请看Define and modify your variables in a script

我为此创建了一个命令行工具和一个 Azure DevOps 任务:https://marketplace.visualstudio.com/items?itemName=riezebosch.setvar

它只是让您将命令的输出通过管道传输到工具中,并将其作为魔术变量字符串输出。它是用 Go 编写并交叉编译的,因此适用于所有主要平台和所有不同的 shell。

你的例子:

echo '$pods' | grep -oh -P '[^ ]*' | grep schema | setvar -name podName3

您只需在此脚本任务之前包含 setvar 任务即可在代理上获取该工具。

向此 post 添加 PSA,看起来他们改变了现在访问变量的方式 - 您必须像这样访问变量:$(variable)

COMMAND=$(echo '$pods' | grep -oh -P '[^ ]*' | grep schema)
echo "##vso[task.setvariable variable=podName3]$(COMMAND)"