【问题标题】:In yaml how to get value of output variable from powershell script then pass it to another template在 yaml 中如何从 powershell 脚本获取输出变量的值,然后将其传递给另一个模板
【发布时间】:2021-08-25 22:19:24
【问题描述】:

我有一个 Azure DevOps Yaml 构建管道。 yaml 文件调用 PowerShell 脚本,如下所示:

- task: PowerShell@1
  name: SetBuildNumber
  displayName: 'Set Build Number'
  inputs:
    scriptName: '$(Build.SourcesDirectory)\BuildScripts\UpdateBuildNumber.ps1'

这个 powershell 脚本应该输出一个变量的值。这就是我所拥有的:

Write-Output '##vso[task.setvariable variable=updatedCounter;isOutput=true]$(updatedCounter)'

&updatedCounter 是该脚本中的一个变量,它被设置为一个数字。我希望调用它的 yaml 文件能够在发送到另一个文件的参数中使用该数字。这就是我所拥有的:

- template: ${{ variables.buildtemplate }}
  parameters:
    BuildVersion: ${{ variables.BuildVersion }}$[SetBuildNumber.updatedCounter]

但是传递给模板的是与字符串“$[SetBuildNumber.updatedCount]”连接的 BuildVersion 变量的值。所以它最终是这样的,例如,variables.BuildVersion 的值是“1.2.3”:

“1.2.3.$[SetBuildNumber.updatedCounter]”

我做错了什么?

【问题讨论】:

    标签: powershell azure-devops yaml pipeline


    【解决方案1】:

    输出变量可以通过宏语法引用:$(),所以应该是:

    BuildVersion: ${{ variables.BuildVersion }}$(SetBuildNumber.updatedCounter)
    

    这仅在您引用来自同一阶段和同一作业的输出变量时才有效。在这种情况下,您也可以删除 isOutput=true 并简单地使用 $(updatedCounter)

    如果引用发生在不同的阶段或作业中,则语法有点more complex

    【讨论】:

    • 是的 - 所以我按照您的描述更改了对宏语法的引用。我还在脚本文件中更改了该行以使用 Write-Host、“$updatedCounter”作为输出,并使用双引号而不是单引号。现在可以了!
    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 2021-03-31
    • 2021-09-22
    • 1970-01-01
    相关资源
    最近更新 更多