how Access Variable in Azure script btw Powershell in Dev Ops Pipeline

Sep 20 2020

W moim pliku yaml zdefiniowałem kilka zmiennych, które powinny zawierać wartość miesiąca ($MinorVersion)lub roku ($MajorVersion), ustawiając wartość na '$(Month)'i / lub '$(Year:yy)'. Kiedy drukuję je w skrypcie zadania lub w programie PowerShell, wyświetla się tylko '$(Month)'i / lub '$(Year:yy)'. Oczekiwany wynik zmiennej $(MajorVersion)to oczywiście bieżący miesiąc i rok 09oraz 20.

Czy ktoś może mi powiedzieć, w jaki sposób mogę uzyskać dostęp do zmiennej $MinorVersionw skrypcie zadania / programie PowerShell, aby uzyskać jej rzeczywistą wartość? Oto zawartość plików:

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"

Dane wyjściowe wyświetlają tylko nieocenioną zawartość zmiennych:

Odpowiedzi

1 LanceLi-MSFT Sep 21 2020 at 03:06

Czy ktoś może mi powiedzieć, w jaki sposób mogę uzyskać dostęp do zmiennej $ MinorVersion w skrypcie zadania / programie PowerShell, aby uzyskać jej rzeczywistą wartość?

Devops Az nie ma takich zmiennych systemowych ani predefiniowanych zmiennych, takich jak $(Year:yy)i $(Month). Dostępne predefiniowane zmienne są zdefiniowane tutaj , nie możemy rozwinąć $(Year:yy)i $(Month)ponieważ nie są one predefiniowane. Jeśli chodzi o value: '$(BuildID)', prawidłowy format BuildIDto $(Build.BuildID)zamiast $(BuildID).

$(Date:yyyyMMdd) and $(Rev:.r)Są czymś, co dotyczy tylko numer kompilacji ( namena rurociągu YAML), powiązanego dokumentu tutaj . Tak więc zwykłe zmienne nie mogą rozszerzać ich wartości, tylko nameelement może je rozpoznać. Powinieneś użyć:

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

Zamiast złego formatu:

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

Obejście problemu w celu pobrania / zdefiniowania zmiennych o wartości Data i czas:

Chociaż zmienne daty i godziny nie są wstępnie zdefiniowane, możemy umieścić jeden krok programu PowerShell na początku, stepsaby ręcznie zdefiniować te zmienne. Możesz sprawdzić link1 i link2, aby uzyskać więcej informacji.

Więc jeśli chcesz zdefiniować zmienne związane z danymi, możesz sprawdzić ustawione zmienne w skryptach :

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

Wyjście drugiego zadania PS: