【问题标题】:Set VSTS output variable to be result from bash command将 VSTS 输出变量设置为 bash 命令的结果
【发布时间】:2018-07-30 07:06:43
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    似乎语法不正确。

    试试下面的格式:

    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

    【讨论】:

    • 您发布的第一个代码 sn-p 只是将 $COMMAND 分配给变量,而不事先评估命令块。不幸的是,作为一个 linux 构建主机,我无法在其上运行 powershell 脚本。如果这不是评估我分配给变量的命令块然后将输出分配给输出变量的正确方法,请让我知道解决此问题的更好方法
    • 感谢您让我走上了正确的道路,我认为这主要是因为看一件事太久。该解决方案基本上只是将语法正确格式化为以下评估变量然后将其分配给输出变量的语法。 COMMAND=$(echo '$(pods)' | grep -oh -P '[^ ]*' | grep schema) echo "##vso[task.setvariable variable=podName3]${COMMAND}"
    • ^ ${COMMAND} 方法也对我有用,谢谢@David Parsonson。但是,对于任何其他为此苦苦挣扎的人,如果您的 echo "##vso[...]" 命令使用单引号(即 echo '##vso[...]'),这仍将评估为 ${COMMAND} - 所以请确保您使用的是双引号!
    【解决方案2】:

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

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

    你的例子:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-06-22
        • 2020-12-19
        • 2011-06-06
        相关资源
        最近更新 更多