我正在使用以下代码从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环境中。
答案 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)
我怀疑这就是为什么即使对值进行硬编码,您仍然看不到任何东西。