Wie Zugriffsvariable im Azure-Skript zwischen Powershell in der Dev Ops-Pipeline

Sep 20 2020

In meiner yaml-Datei habe ich einige Variablen definiert, die den Wert des Monats ($MinorVersion)oder Jahres enthalten sollen ($MajorVersion), indem ich den Wert auf '$(Month)'und / oder gesetzt habe '$(Year:yy)'. Wenn ich sie im Task-Skript oder in der Task-Powershell drucke, werden nur '$(Month)'und / oder angezeigt '$(Year:yy)'. Die erwartete Ausgabe der Variablen $(MajorVersion)ist natürlich der aktuelle Monat und das aktuelle Jahr 09und 20.

Kann mir jemand sagen, wie ich auf die Variable $MinorVersionim Task-Skript / in der Powershell zugreifen kann, um den tatsächlichen Wert zu ermitteln? Das ist der Inhalt der Dateien:

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"

Die Ausgabe zeigt nur den nicht bewerteten Inhalt der Variablen an:

Antworten

1 LanceLi-MSFT Sep 21 2020 at 03:06

Kann mir jemand sagen, wie ich auf die Variable $ MinorVersion im Task-Skript / Powershell zugreifen kann, um den tatsächlichen Wert zu ermitteln?

Az-Entwickler haben keine solchen Systemvariablen oder vordefinierten Variablen wie $(Year:yy)und $(Month). Die verfügbaren vordefinierten Variablen werden hier definiert . Wir können sie nicht erweitern $(Year:yy)und $(Month)sind nicht vordefiniert. Was value: '$(BuildID)'ist das richtige Format BuildIDist $(Build.BuildID)statt $(BuildID).

Das $(Date:yyyyMMdd) and $(Rev:.r)ist etwas , das nur gültig für Build - Nummer ( namefür yaml Pipeline), zugehöriges Dokument hier . Normale Variablen können ihren Wert also nicht erweitern, nur das nameElement kann sie erkennen. Du solltest benutzen:

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

Anstelle eines falschen Formats:

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

Problemumgehung zum Abrufen / Definieren von Variablen mit dem Wert Datum Uhrzeit:

Obwohl die Variablen der Datums- und Uhrzeitangabe nicht vordefiniert sind, können wir zu Beginn einen PowerShell-Schritt setzen steps, um diese Variablen manuell zu definieren. Sie können Link1 und Link2 für weitere Details überprüfen .

Wenn Sie also datenbezogene Variablen definieren möchten, können Sie festgelegte Variablen in Skripten überprüfen :

- 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)

Ausgabe der zweiten PS-Aufgabe: