如何使用Bash在Azure DevOps中设置生成变量?

时间:2018-12-18 16:39:54

标签: bash azure-devops

我正在使用以下代码从package.json文件中提取版本,并将其设置为我的构建变量之一Version

# successfully retrieves and prints the version to console
ver=$(node -e "console.log(require('./package.json').version)")
echo "Version: $ver"

# does jack squat
# even trying to hard-code something in place of $ver doesn't set the variable
echo "##vso[task.setvariable variable=Version]$ver"
echo "Version: $(Version)"

我尝试使用ver$(ver)而不是$ver,但是在所有情况下控制台都为$(Version)打印空白时,它们都不起作用(开头是空的)。如果我对Version进行硬编码,则可以正常打印,因此不是打印或检索,这是问题所在。我的脚本基于MS的示例

echo "##vso[task.setvariable variable=sauce]crushed tomatoes"

我们的构建服务器在Windows环境中。

2 个答案:

答案 0 :(得分:1)

在这一行之后 echo "##vso[task.setvariable variable=Version]$ver" 该值存储在环境变量 VERSION 中。

您可以在下一个脚本步骤中访问它,使用:

- bash: |
    echo "my environment variable is $VERSION"
- pwsh: |
    Write-Host "my environment variable is $env:VERSION"
- script: |
    echo "my environment variable is %VERSION%"

然后您可以使用 PowerShell 将其转换为管道变量:

- pwsh: |
    Write-Host "Setting version to: $env:VERSION"
    Write-Host "##vso[task.setvariable variable=version;isOutput=true]$env:VERSION"
  displayName: 'Set version'
  name: set_version

之后,您可以在其他任务或参数中使用 $(set_version.version)

答案 1 :(得分:-1)

发布后不久便来了,但是我想分享一下,以防其他人偶然发现。

在文档中,直到任务结束后才会扩展管道变量。 Microsoft has enhanced their documentation to illustrate it better

steps:

# Create a variable
- script: |
    echo '##vso[task.setvariable variable=sauce]crushed tomatoes'

# Use the variable
# "$(sauce)" is replaced by the contents of the `sauce` variable by Azure Pipelines
# before handing the body of the script to the shell.
- script: |
    echo my pipeline variable is $(sauce)

我怀疑这就是为什么即使对值进行硬编码,您仍然看不到任何东西。