如何在Dev Ops管道中使用Azure脚本访问Powershell中的变量

时间:2020-09-20 12:37:44

标签: azure-devops

在我的yaml文件中,我通过将值设置为($MinorVersion)和/或($MajorVersion)定义了一些变量,这些变量应包含月份'$(Month)'或年份'$(Year:yy)'的值。 。当我在任务脚本或任务Powershell中打印它们时,它仅显示'$(Month)'和/或'$(Year:yy)'。变量$(MajorVersion)的预期输出当然是当前月份和年份0920

有人可以告诉我如何访问任务脚本/ powershell中的变量$MinorVersion以获得其实际值吗?那就是文件内容:

trigger:
- master

pool:
  vmImage: 'windows-latest'

#import variable group resize-group, local variables are name/value pairs
variables:
- group: resize-group
- name: buildConfiguration
  value: 'Release'
- name: appxPackageDir
  value: '$(build.artifactStagingDirectory)\AppxPackages\\'
- name: MajorVersion
  value: '$(Year:yy)'
- name: MinorVersion
  value: '$(Month)'
- name: PatchVersion
  value: 45
- name: RevVersion
  value: '$(BuildID)'
- name: Packageappxmanifest
  value: Package.appxmanifest
- name: PackageVersion
  value: '$(MajorVersion).$(MinorVersion).$(PatchVersion).$(RevVersion)'


name: $(BuildDefinitionName)_$(MajorVersion).$(MinorVersion).$(PatchVersion)$(RevVersion)

steps:
- checkout: self
  submodules: true


- script: | 
     echo %MinorVersion%
     echo %variables.MinorVersion%
     echo $($[variables.MinorVersion])
     echo ${{ variables.MinorVersion }} # outputs initialValue
     echo $(Month)
     echo $(MajorVersion)
     echo $(MinorVersion)
     echo $(RevVersion)
     echo $(PackageVersion)
     echo $(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)

- powershell: |
    Write-Host  $env:MinorVersion
    Write-Host  $env:variables.MinorVersion%
    Write-Host "$env:MY_MAPPED_PACKAGEVERSION"
    Write-Host "$env:MY_MAPPED_REVVERSION"

输出仅显示变量的未评估内容: enter image description here

1 个答案:

答案 0 :(得分:1)

有人可以告诉我如何访问变量$ MinorVersion 任务脚本/ powershell来获取它的实际值吗?

Az devops没有这样的系统变量或预定义变量,例如$(Year:yy)$(Month)。可用的预定义变量是here定义的,我们不能展开$(Year:yy)$(Month),因为它们不是预定义的。对于value: '$(BuildID)'BuildID的正确格式是$(Build.BuildID),而不是$(BuildID)

$(Date:yyyyMMdd) and $(Rev:.r)仅对内部版本号(对于Yaml管道为related document here)有效。因此,普通变量无法扩展它们的值,只有name元素才能识别它们。您应该使用:

name

代替错误的格式:

name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.r)

enter image description here

获取/定义日期时间值的变量的解决方法:

尽管尚未预定义日期时间的变量,但我们可以在name: $(BuildDefinitionName)_$(MajorVersion).$(MinorVersion).xxx的开头放置一个PowerShell步骤来手动定义这些变量。您可以检查link1link2以获得更多详细信息。

因此,如果要定义与数据相关的变量,可以检查set variables in scripts

steps

第二个PS任务的输出:

enter image description here