Передача переменной в шаблон в конвейере YAML 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'] ]

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

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

1 ответ

Решение

Нет проблем с синтаксисом для вызова 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'] ]:

Другие вопросы по тегам