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

问题描述 投票:0回答:4

我正在 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
4个回答
18
投票

语法似乎不正确。

尝试以下格式:

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"

更多信息请参阅在脚本中定义和修改变量


2
投票

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

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

你的例子:

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

您只需在此脚本任务之前包含

setvar
任务即可在代理上获取该工具。


1
投票

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

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

0
投票

这是 2023 年有效的方法,与其他答案类似但(严格意义上)不完全相同:

  - script: |
      version=$(npm pkg get version)
      echo "##vso[task.setvariable variable=VERSION]${version}"
  - task: Docker@2
    inputs:
      command: build
      arguments: --build-arg VERSION=$(VERSION)
      ...
© www.soinside.com 2019 - 2024. All rights reserved.