如何使用Bash在Azure DevOps中设置构建变量?
我正在使用下面的命令从package.json文件中提取版本,并将其设置为我的构建变量之一,如何使用Bash在Azure DevOps中设置构建变量?,bash,azure-devops,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 someth
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
,没有任何效果,因为控制台在所有情况下都会为$(版本)
打印空白(开始时为空)。如果我使用硬编码版本
,它可以很好地打印,因此问题不在于打印或检索,而在于设置。我的脚本基于MS的示例
echo“##vso[task.setvariable=sauce]碎番茄”
我们的生成服务器位于Windows环境中 在发布后的一段时间内,我想到了这一点,但我想我会与大家分享,以防其他人偶然发现这一点 从文档中可以看出,管道变量直到任务结束后才会展开 我怀疑这就是为什么即使在硬编码一个值时,您仍然看不到任何东西。在这一行之后
echo“##vso[task.setvariable=Version]$ver”
该值存储在环境变量版本中
您可以在下一个脚本步骤中使用:
- 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)
。如果将$(..)
的输出存储在变量ver
中,则echo“$ver”
应生成您需要的结果need@Inian那么,echo“##vso[task.setvariable=Version]$ver”
在您看来是正确的吗?因为它确实是我的。看看这个,从不同的上下文引用变量。我认为您需要将bash脚本引用为$VERSION。@但它不起作用。当我试图打印最后一行中的build变量时,它是空白的,而不是像ver
变量那样的1.0.0。我会试一试,@Matt。正在等待构建代理…这是bash的吗?@maxbarras这是yaml配置文件,您必须使用echo语句。但Andy的意思是,它需要在后续任务中使用。这是有道理的,因为您的代码似乎都在同一个位置file@BigMoneyOP似乎在执行bash脚本,因为$()是sub-bash eval。同样在bash中,“”表示表达式的计算结果将比“”更一致(单引号)。啊,是的,微软使用$()作为变量eval,这不是它在实际bash中的工作方式(不确定他们为什么这样称呼它),下面是一些例子
- 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