Передайте переменную в шаблон в конвейере YAML Azure - PullRequest
0 голосов
/ 28 апреля 2020

Рассмотрим следующее рабочее задание из azure конвейера yaml

  - job: create_slot
    dependsOn: setup
    displayName: 'Create slot'
    pool:
      vmImage: 'windows-latest'
    variables:
      slotName: $[ dependencies.setup.outputs['slot.name'] ]
    steps:
      - bash: |
          echo "Slot to be created: $(slotName)"
        displayName: 'Show slot name'
      - template: templates/create-slot.yml
        parameters:
          slot: $(slotName)

Из документации Я ожидаю, что я могу заменить marco $(slotName) напрямую выражением времени выполнения $[ dependencies.setup.outputs['slot.name'] ], что приводит к следующему:

   - job: create_slot
    dependsOn: setup
    displayName: 'Create slot'
    pool:
      vmImage: 'windows-latest' 
    steps:
      - bash: |
          echo "Slot to be created: $(slotName)"
        displayName: 'Show slot name'
      - template: templates/create-slot.yml
        parameters:
          slot: $[ dependencies.setup.outputs['slot.name'] ]

Но если вы сделаете это, конвейер завершится неудачно

enter image description here

С При ошибке у меня складывается впечатление, что $[ dependencies.setup.outputs['slot.name'] ] передается в виде строки. Возможно, что я пытаюсь здесь, возможно, у меня неправильный синтаксис.

1 Ответ

1 голос
/ 28 апреля 2020

Нет синтаксической проблемы для вызова slot.name на вашем create_slot задании, здесь проблема должна решаться сценарием, который вы использовали в setup задании. Поскольку вы не поделились сценариями задания setup, я публикую нижеприведенные ниже сообщения вместе с некоторыми ключевыми моментами.

В вашем задании setup он должен содержать один сценарий для создания вывода переменная name. Также , задача, которая содержит процесс генерации переменной, должна сконфигурировать справочное имя slot.

Простой пример ( Обновлено ):

jobs:
- job: setup
  steps:
  - checkout: none
  - task: PowerShell@2
    inputs:
      targetType: 'inline'
      script: 'echo "##vso[task.setvariable variable=name;isOutput=true]Staging"'
    name: slot
- job: create_slot
  dependsOn: setup
  variables:
    slotName: $[ dependencies.setup.outputs['slot.name'] ]
  steps:
  - checkout: none
  - bash: |
          echo "Slot to be created: $(slotName)"
    displayName: 'Show slot name'

Только в этом случае задание create_slot, от которого зависит , задание setup может получить имя переменной, используя синтаксис $[ dependencies.Job1.outputs['slot.name'] ]:

enter image description here

...