Azure параметры конвейера c параметров в файл шаблона из конвейера YAML - PullRequest
0 голосов
/ 10 марта 2020

В настоящее время я работаю с Azure Devops Build Pipelines и пытаюсь вызвать файл шаблона для выполнения некоторых задач из моей сборки yaml.

У меня возникают трудности с передачей параметров в файл шаблона , Предположим, что это мой шаблонный файл (упрощенный), который прекрасно работает:

parameters:
 iterations: []

steps:
- ${{ each i in parameters.iterations }}:
- task: PowerShell@2
  displayName: "Get key values ${{i}}"
  name: getKeyValues_${{i}}
  inputs:
    targetType: 'inline'
    script: |
      $item = "${{i}}"
      Write-Host "item : $($item)"
      $keyVal = $item -split "_"
      Write-Host $keyVal
      Write-Host "key: $($keyVal[0]) | value: $($keyVal[1])"
      echo "##vso[task.setvariable variable=key;isOutput=true]$($keyVal[0])"
      echo "##vso[task.setvariable variable=value;isOutput=true]$($keyVal[1])"

Итак, я хочу, чтобы мой параметр итераций содержал что-то вроде этого:

iterations: ["1_60", "2_40"]

Внутри моего конвейера Yaml у меня есть следующий код (также упрощенный):

Не работает сценарий

- task: PowerShell@2
   displayName: Calculate iterations for $(copies) copies
   name: calculateIterations
   inputs:
   targetType: 'inline'
   script: |
       # Do some stuf here to get the arrow below from int value = 100 
       $iterations = ["1_60, "2_40"]
       echo "##vso[task.setvariable variable=iterations;isOutput=true]$($iterations)"

- template: container-template.yml 
   parameters:
     iterations: $(calculateIterations.iterations)

Рабочий сценарий

- task: PowerShell@2
   displayName: Calculate iterations for $(copies) copies
   name: calculateIterations
   inputs:
   targetType: 'inline'
   script: |
       # Do some stuf here to get the arrow below from int value = 100 
       $iterations = ["1_60, "2_40"]
       echo "##vso[task.setvariable variable=iterations;isOutput=true]$($iterations)"

- template: container-template.yml 
   parameters:
     iterations: ["1_60, "2_40"]

Как видите, проблема в том, что я не могу используйте выходную переменную моего скрипта, чтобы передать его в качестве параметра моему шаблону. Когда я запускаю неработающий сценарий, у меня появляется следующая ошибка: enter image description here

Я нашел эту запись , но пока не найдено решений ...

1 Ответ

0 голосов
/ 11 марта 2020

Как сказал 4c74356b41, это дилемма в настоящее время. Другими словами, упомянутый вами неработающий сценарий не поддерживает достижение до сих пор.

Теперь мы должны сообщить template открытый текст во время compile . Потому что в течение этого времени компиляции у нас возникают трудности с одновременным выполнением двух или более действий, особенно содержащих значение переменной компиляции, передавая соответствующие аргументы шаблона c и т. Д. c.


Ожидается последовательность или отображение. Фактическое значение '$ (calculateIterations.iterations)'

Более подробно, во время компиляции ( после нажатия Выполнить , но до истинного запуска конвейера ):

1) Сначала мы отображаем значение, полученное из конвейера YAML, чтобы убедиться, что - ${{ each i in parameters.iterations }} имеет четкое значение для start .

2) После того, как это будет сделано, проанализируйте точное значение на name: getKeyValues_${{i}} в порядке сценария.

В вашем сценарии он даже не может удовлетворить первый шаг, поскольку то, что вы передали, является переменной, и у нас здесь нет процесса анализа значения. Вот почему вы увидели ошибку, сказанную Expected a sequence or mapping. Actual value '$(calculateIterations.iterations)'.

Другое выражение этого сообщения об ошибке: мы ( шаблон ) с нетерпением ждем точных значений для сопоставления наших динамических c параметров, но что Вы даете нераспознанное содержание $(calculateIterations.iterations). К сожалению, мы не можем начать работать.

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