【问题标题】:how Access Variable in Azure script btw Powershell in Dev Ops Pipeline如何在 Devops Pipeline 中使用 Powershell 访问 Azure 脚本中的变量
【发布时间】:2020-09-20 12:37:44
【问题描述】:

在我的 yaml 文件中,我通过将值设置为 '$(Month)' 和/或 '$(Year:yy)',定义了一些变量,这些变量应该包含月份 ($MinorVersion) 或年份 ($MajorVersion)。当我在任务脚本或任务 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"

输出仅显示变量未计算的内容:

【问题讨论】:

    标签: azure-devops


    【解决方案1】:

    谁能告诉我如何访问变量 $MinorVersion 任务脚本/powershell获取实际值呢?

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

    $(Date:yyyyMMdd) and $(Rev:.r) 仅对内部版本号有效(name 用于 yaml 管道),related document here。所以普通的变量不能扩展它们的值,只有name元素可以识别它们。你应该使用:

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

    而不是错误的格式:

    name: $(BuildDefinitionName)_$(MajorVersion).$(MinorVersion).xxx

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

    虽然日期时间的变量没有预定义,但我们可以在steps的开头放置一个PowerShell步骤来手动定义这些变量。您可以查看link1link2 了解更多详情。

    所以如果要定义数据相关的变量,可以查看set variables in scripts

    - task: PowerShell@2
      inputs:
        targetType: 'inline'
        script: |
          $year=$(Get-Date -Format 'yyyy')
          Write-Host "##vso[task.setvariable variable=MajorVersion]$year"
          $month=$(Get-Date -Format 'MM')
          Write-Host "##vso[task.setvariable variable=MinorVersion]$month"
          $day=$(Get-Date -Format 'dd')
          Write-Host "##vso[task.setvariable variable=DayOfMonth]$day"
    
    
    - powershell: |
        Write-Host  $(MajorVersion)
        Write-Host  $(MinorVersion)
        Write-Host  $(DayOfMonth)
    

    第二个 PS 任务的输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 2021-01-03
      • 2019-11-08
      • 2019-09-18
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 2018-04-03
      相关资源
      最近更新 更多