Azure Pipeline Необходимость передачи вывода Power Shell в карту конфигурации Kubernetes, похоже, что задача Kubernetes вообще не читает переменную - PullRequest
0 голосов
/ 15 января 2020
- task: PowerShell@2
    displayName: Save Storage account Secrets to Build Variables
    inputs:
      azureSubscription: 
      targetType: 'inline'
      script: '$outputs = ConvertFrom-Json $($env:STORAGE); foreach ($output in $outputs.PSObject.Properties) { echo $output.Name; echo $output.Value.value; Write-Host ("##vso[task.setvariable variable=$($output.Name);]$($output.Value.value)");}'

- phase: DEVRelease
  dependsOn: Build
  queue: Hosted Ubuntu 1604
  steps:
  - task: Kubernetes@1
    displayName: Apply Kubernetes Deployment
    inputs:
      kubernetesServiceEndpoint: 
      arguments: "-f conf/deploy_local.yaml"
      command: apply
      azureSubscription: 
      azureContainerRegistry: 
      configMapName: myconfig
      forceUpdateConfigMap: true
      configMapArguments: --from-literal=myname=$($env:STORAGEACCOUNTNAME1)

Никогда не читает переменную $ env: STORAGEACCOUNTNAME

1 Ответ

0 голосов
/ 16 января 2020

Поскольку задача PowerShell по установке переменных находится в фазе build . Вам нужно добавить isOutput=true в оператор setvariable. Проверьте Установите выходную переменную для нескольких заданий

"##vso[task.setvariable variable=$($output.name);isOutput=true]$($output.Value)"

Я внес в ваш yaml небольшие изменения для тестирования. Пожалуйста, проверьте это. У меня есть переменная env STORAGE = {'tags':[{'name':'A', 'Value':'1' }, { 'name':'B', 'Value':'2'}]}

phases:
- phase: build
  queue: Hosted Ubuntu 1604
  steps:
  - powershell: |
      $outputs = ConvertFrom-Json $($env:STORAGE)
      foreach ($output in $outputs.tags) { echo $output.name; echo $output.Value; Write-Host ("##vso[task.setvariable variable=$($output.name);isOutput=true]$($output.Value)");}
    name: myvariables
  - powershell: |
      echo "$(myvariables.A)"
      echo "$(myvariables.A)"


- phase: DEVRelease
  dependsOn: Build
  queue: Hosted Ubuntu 1604
  variables: 
    Da: $[ dependencies.build.outputs['myvariables.A'] ]
    Db: $[ dependencies.build.outputs['myvariables.B'] ]

  steps:
  - powershell: |
      echo $(Da)
      echo $(Db)

. В приведенном выше сценарии я вывожу переменную при фазовой сборке, добавив isOutput=true в оператор и присвоив моей задаче powershell имя name: myvariables.

И я обращаюсь к выходной переменной на следующем этапе DEVRelease, используя инструкцию $[ dependencies.{dependent phase name}.outputs['{task name}.{variable name}'] ] и присваиваю ее Переменным .

Тогда я могу успешно получить значение в задаче powershell в фазе DEVRelease. enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...