como acessar a variável no script do Azure entre o Powershell no Dev Ops Pipeline

Sep 20 2020

No meu arquivo yaml, defini algumas variáveis ​​que devem conter o valor do mês ($MinorVersion)ou ano ($MajorVersion), definindo o valor como '$(Month)'e / ou '$(Year:yy)'. Quando eu os imprimo no script de tarefa ou no PowerShell de tarefa, ele apenas exibe '$(Month)'e / ou '$(Year:yy)'. A produção esperada da variável $(MajorVersion)é, naturalmente, o mês e o ano atuais 09e 20.

Alguém pode me dizer como posso acessar a variável $MinorVersionno script de tarefa / powershell para obter o valor real dela? Este é o conteúdo dos arquivos:

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"

A saída exibe apenas o conteúdo não avaliado das variáveis:

Respostas

1 LanceLi-MSFT Sep 21 2020 at 03:06

Alguém pode me dizer como posso acessar a variável $ MinorVersion no script de tarefa / powershell para obter o valor real dela?

Az devops não tem variáveis ​​de sistema ou variáveis ​​predefinidas como $(Year:yy)e $(Month). As variáveis ​​predefinidas disponíveis são definidas aqui , não podemos expandir $(Year:yy)e $(Month)porque elas não são predefinidas. Quanto a value: '$(BuildID)', o formato correto de BuildIDé em $(Build.BuildID)vez de $(BuildID).

Eles $(Date:yyyyMMdd) and $(Rev:.r)são válidos apenas para Build Number ( namepara yaml pipeline), documento relacionado aqui . Portanto, as variáveis ​​normais não podem expandir o valor delas, apenas o nameelemento pode reconhecê-las. Você deveria usar:

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

Em vez de formato errado:

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

Solução alternativa para obter / definir variáveis ​​com valor de data e hora:

Embora as variáveis ​​de data e hora não sejam predefinidas, podemos colocar uma etapa do PowerShell no início de stepspara definir essas variáveis ​​manualmente. Você pode verificar link1 e link2 para mais detalhes.

Portanto, se você deseja definir variáveis ​​relacionadas a dados, pode verificar o conjunto de variáveis ​​em 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)

Saída da segunda tarefa PS: