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

时间:2018-07-30 07:06:43

标签: azure-devops azure-pipelines azure-pipelines-release-pipeline azure-pipelines-build-task

我正在VSTS中运行一个任务,该任务对上一步中的变量执行一些操作,然后我需要输出结果以用于将来的任务。我在Linux构建主机上运行的命令行任务中具有以下内容,但是稍后尝试与$(podName3)结合使用结果时运气不佳。

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

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

3 个答案:

答案 0 :(得分:10)

似乎语法不正确。

只需尝试以下格式:

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

答案 1 :(得分:1)

在这篇文章中添加一个 PSA,看起来他们改变了现在访问变量的方式——你必须像这样访问变量:$(variable)

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

答案 2 :(得分:0)

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

它仅允许您将命令的输出通过管道传递到工具中,并将其作为魔术变量字符串输出。它是用Go语言编写并交叉编译的,因此可以在所有主要平台和所有不同的shell上使用。

您的示例:

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

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