Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Bash在Azure DevOps中设置构建变量?_Bash_Azure Devops - Fatal编程技术网

如何使用Bash在Azure DevOps中设置构建变量?

如何使用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

我正在使用下面的命令从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
,没有任何效果,因为控制台在所有情况下都会为
$(版本)
打印空白(开始时为空)。如果我使用硬编码
版本
,它可以很好地打印,因此问题不在于打印或检索,而在于设置。我的脚本基于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